std::convertible_to (since C++20)
From cppreference.com
                    
                                        
                    
                    
                                                            
                    |   Defined in header  <concepts>
  | 
||
|   template< class From, class To > concept convertible_to =  | 
(since C++20) | |
The concept convertible_to<From, To> specifies that an expression of the same type and value category as those of std::declval<From>() can be implicitly and explicitly converted to the type To, and the two forms of conversion produce equal results.
Semantic requirements
convertible_to<From, To> is modeled only if, given a function fun of type std::add_rvalue_reference_t<From>() such that the expression fun() is equality-preserving,
-  Either 
-  
Tois neither an object type nor a reference-to-object type, or - static_cast<To>(fun()) is equal to []() -> To { return fun(); }(), and
 
 -  
 
-  One of the following is true:
- std::add_rvalue_reference_t<From> is not a reference-to-object type, or
 - std::add_rvalue_reference_t<From> is an rvalue reference to a non-const-qualified type, and the resulting state of the object referenced by fun() is valid but unspecified after either expression above; or
 - the object referred to by fun() is not modified by either expression above.
 
 
Equality preservation
Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving (except where stated otherwise).
References
- C++23 standard (ISO/IEC 14882:2024):
 
-  18.4.4 Concept 
convertible_to[concept.convertible] 
-  18.4.4 Concept 
 
- C++20 standard (ISO/IEC 14882:2020):
 
-  18.4.4 Concept 
convertible_to[concept.convertible] 
-  18.4.4 Concept 
 
See also
|    (C++11)(C++20)  | 
   checks if a type can be converted to the other type   (class template)  |