std::convertible_to

From cppreference.com
< cpp‎ | concepts
Defined in header <concepts>
template < class From, class To >

concept convertible_to =
std::is_convertible_v <From, To> &&
    requires {
static_cast <To> ( std::declval <From> ( ) ) ;

} ;
(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

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
    • To is neither an object type nor a reference-to-object type, or
    • static_cast<To>(fun()) is equal to [ ] ( ) - > To { return fun( ) ; } ( )
  • One of the following is true:

Equality preservation

Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving

References

  • C++23 standard (ISO/IEC 14882:2024):
  • 18.4.4 Concept convertible_to [concept.convertible]
  • C++20 standard (ISO/IEC 14882:2020):
  • 18.4.4 Concept convertible_to [concept.convertible]

See also

checks if a type can be converted to the other type
(class template)