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