Namespaces
Variants

std:: convertible_to

From cppreference.net
Определено в заголовке <concepts>
template < class From, class To >

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

} ;
(начиная с C++20)

Концепт convertible_to < From, To > определяет, что выражение того же типа и категории значения, что и std:: declval < From > ( ) может быть неявно и явно преобразовано в тип To , причем обе формы преобразования дают одинаковые результаты.

Содержание

Семантические требования

convertible_to < From, To > моделируется только тогда, когда для функции fun типа std:: add_rvalue_reference_t < From > ( ) выражение fun ( ) является equality-preserving ,

  • Либо
    • To не является ни объектным типом, ни ссылочным типом на объект, или
    • static_cast < To > ( fun ( ) ) равно [ ] ( ) - > To { return fun ( ) ; } ( ) , и
  • Одно из следующих условий истинно:
    • std:: add_rvalue_reference_t < From > не является ссылочным типом на объект, или
    • std:: add_rvalue_reference_t < From > является rvalue-ссылкой на тип без квалификатора const, и результирующее состояние объекта, на который ссылается fun ( ) является допустимым, но неопределённым после любого из вышеуказанных выражений; или
    • объект, на который ссылается fun ( ) не модифицируется ни одним из вышеуказанных выражений.

Сохранение равенства

Выражения, объявленные в requires выражениях концепций стандартной библиотеки, должны быть equality-preserving (если не указано иное).

Ссылки

  • Стандарт C++23 (ISO/IEC 14882:2024):
  • 18.4.4 Концепт convertible_to [concept.convertible]
  • Стандарт C++20 (ISO/IEC 14882:2020):
  • 18.4.4 Концепт convertible_to [concept.convertible]

Смотрите также

проверяет, может ли тип быть преобразован в другой тип
(шаблон класса)