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

std::common_with

Материал из cppreference.com
 
 
 
<tbody> </tbody>
Определено в заголовочном файле <concepts>
template <class T, class U> concept common_with = std::same_as<std::common_type_t<T, U>, std::common_type_t<U, T>> && requires { static_cast<std::common_type_t<T, U>>(std::declval<T>()); static_cast<std::common_type_t<T, U>>(std::declval<U>()); } && std::common_reference_with< std::add_lvalue_reference_t<const T>, std::add_lvalue_reference_t<const U>> && std::common_reference_with< std::add_lvalue_reference_t<std::common_type_t<T, U>>, std::common_reference_t< std::add_lvalue_reference_t<const T>, std::add_lvalue_reference_t<const U>>>;
(начиная с C++20)

Концепт common_with<T, U> определяет, что два типа T и U разделяют общий тип (как вычисленный с помощью std::common_type_t), в которые оба могут быть преобразованы.

Семантические требования

T и U моделируют std::common_with<T, U>, только если при данных сохраняющих равенство выражениях t1, t2, u1 и u2, таких, что decltype((t1)) и decltype((t2)) оба являются T, а decltype((u1)) и decltype((u2)) являются U,

  • std::common_reference_t<T, U>(t1) равно std::common_reference_t<T, U>(t2) тогда и только тогда, когда t1 равно t2; и
  • std::common_reference_t<T, U>(u1) равно std::common_reference_t<T, U>(u2) тогда и только тогда, когда u1 равно u2.

Другими словами, преобразование в общий тип должно сохранять равенство.

Сохранение равенства

Выражения, объявленные в выражениях requires концептов стандартной библиотеки, должны сохранять равенство (если не указано иное).

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

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