Namespaces
Variants

std::experimental::ranges:: Common

From cppreference.net
Определено в заголовочном файле <experimental/ranges/concepts>
template < class T, class U >

concept bool Common =
Same < ranges:: common_type_t < T, U > , ranges:: common_type_t < U, T >> &&
ConvertibleTo < T, ranges:: common_type_t < T, U >> &&
ConvertibleTo < U, ranges:: common_type_t < T, U >> &&
CommonReference <
std:: add_lvalue_reference_t < const T > ,
std:: add_lvalue_reference_t < const U >> &&
CommonReference <
std:: add_lvalue_reference_t < ranges:: common_type_t < T, U >> ,
ranges:: common_reference_t <
std:: add_lvalue_reference_t < const T > ,

std:: add_lvalue_reference_t < const U >>> ;
(ranges TS)

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

Common<T, U> удовлетворяется только в том случае, если для выражений t и u таких, что decltype ( ( t ) ) является T и decltype ( ( u ) ) является U ,

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

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

Выражение называется сохраняющим равенство если оно даёт равные результаты при равных входных данных.

  • Входные данные выражения состоят из его операндов.
  • Выходные данные выражения состоят из его результата и всех операндов, изменённых выражением (если таковые имеются).

Каждое выражение, которое должно сохранять равенство, дополнительно должно быть стабильным : два вычисления такого выражения с одинаковыми входными объектами должны давать равные результаты при отсутствии каких-либо явных изменений этих входных объектов между вычислениями.

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

определить общий тип набора типов
(class template)
определить общий ссылочный тип набора типов
(class template)
указывает, что два типа имеют общий ссылочный тип
(concept)