Spec-Zone.ru › C++

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

См. также

is_convertibleis_nothrow_convertible
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API