Namespaces
Variants

std::experimental::ranges:: ConvertibleTo

From cppreference.net
Определено в заголовочном файле <experimental/ranges/concepts>
template < class From, class To >

concept bool ConvertibleTo =
std:: is_convertible < From, To > :: value &&
requires ( From ( & f ) ( ) ) {
static_cast < To > ( f ( ) ) ;

} ;
(ranges TS)

Концепт ConvertibleTo < From, To > определяет, что выражение типа и категории значения, заданных From , может быть неявно и явно преобразовано в тип To , причем обе формы преобразования эквивалентны.

В частности, ConvertibleTo < From, To > удовлетворяется только тогда, когда для вымышленной функции To test ( From ( & f ) ( ) ) { return f ( ) ; } и функции f типа From ( ) такое, что выражение f ( ) является сохраняющим равенство (см. ниже),

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

Между ConvertibleTo < From, To > и std:: is_convertible < From, To > :: value не обязательно должно существовать отношение включения.

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

Выражение называется сохраняющим равенство если оно даёт равные результаты при равных входных данных.

  • Входные данные выражения состоят из его операндов.
  • Выходные данные выражения состоят из его результата и всех операндов, измененных выражением (если таковые имеются).

Каждое выражение, которое должно сохранять равенство, дополнительно должно быть стабильным : два вычисления такого выражения с одинаковыми входными объектами должны давать равные результаты при отсутствии каких-либо явных изменений этих входных объектов между вычислениями.

Если не указано иное, каждое выражение, используемое в requires-expression , должно быть сохраняющим равенство и стабильным, и вычисление выражения может изменять только свои неконстантные операнды. Операнды, которые являются константными, не должны изменяться.

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

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