std::experimental::ranges:: ConvertibleTo
|
Определено в заголовочном файле
<experimental/ranges/concepts>
|
||
|
template
<
class
From,
class
To
>
concept
bool
ConvertibleTo
=
|
(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 , должно быть сохраняющим равенство и стабильным, и вычисление выражения может изменять только свои неконстантные операнды. Операнды, которые являются константными, не должны изменяться.
Смотрите также
|
(C++11)
(C++20)
|
проверяет, может ли тип быть преобразован в другой тип
(шаблон класса) |