std::convertible_to
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <concepts>
|
||
template <class From, class To> concept convertible_to = std::is_convertible_v<From, To> && requires(std::add_rvalue_reference_t<From> (&f)()) { static_cast<To>(f()); }; |
(начиная с 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<В>(fun())равен[]() -> To { return fun(); }(), и
- Верно одно из следующих утверждений:
std::add_rvalue_reference_t<From>не является типом ссылки на объект, илиstd::add_rvalue_reference_t<From>является rvalue ссылкой на не const-квалифицированный тип, и результирующее состояние объекта, на который ссылаетсяfun(), допустимо, но не определено после любого выражения выше; или- объект, на который ссылается
fun(), не модифицируется ни одним из приведённых выше выражений.
Сохранение равенства
Выражения, объявленные в выражениях requires концептов стандартной библиотеки, должны сохранять равенство (если не указано иное).
Смотрите также
(C++11)(C++20) |
проверяет, можно ли преобразовать тип в другой тип (шаблон класса) |