7 Concepts library [concepts.lib]

7.3 Core language concepts [concepts.lib.corelang]

7.3.6 Concept Common [concepts.lib.corelang.common]

If T and U can both be explicitly converted to some third type, C, then T and U share a common type, C. [ Note: C could be the same as T, or U, or it could be a different type. C may not be unique. — end note ]

template <class T, class U> concept bool Common = Same<common_type_t<T, U>, common_type_t<U, T>> && ConvertibleTo<T, common_type_t<T, U>> && ConvertibleTo<U, common_type_t<T, U>> && CommonReference< add_lvalue_reference_t<const T>, add_lvalue_reference_t<const U>> && CommonReference< add_lvalue_reference_t<common_type_t<T, U>>, common_reference_t< add_lvalue_reference_t<const T>, add_lvalue_reference_t<const U>>>;

Let C be common_type_t<T, U>. Let t be a function whose return type is T, and let u be a function whose return type is U. Common<T, U> is satisfied only if:

Note: Users can customize the behavior of Common by specializing the common_type class template ([meta.unary.prop]). — end note ]