std::convertible_to
Определён в заголовочном файле <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() сохраняет равенство,
- выполняется одно из следующих условий:
-
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-выражениях концептов стандартной библиотеки, сохраняли равенство (за исключением случаев, когда указано иное).
Ссылки
- Стандарт 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]
См. также
|
(C++11)(C++20) | проверяет, можно ли преобразовать один тип в другой (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/concepts/convertible_to