Пространства имён
Варианты
Действия

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 концептов стандартной библиотеки, должны сохранять равенство (если не указано иное).

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

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