18 Concepts library [concepts]

18.4 Language-related concepts [concepts.lang]

18.4.5 Concept common_reference_with [concept.commonref]

For two types T and U, if common_reference_t<T, U> is well-formed and denotes a type C such that both convertible_to<T, C> and convertible_to<U, C> are modeled, then T and U share a common reference type, C.
[Note 1: 
C can be the same as T or U, or can be a different type.
C can be a reference type.
— end note]
template<class T, class U> concept common_reference_with = same_as<common_reference_t<T, U>, common_reference_t<U, T>> && convertible_to<T, common_reference_t<T, U>> && convertible_to<U, common_reference_t<T, U>>;
Let C be common_reference_t<T, U>.
Let t1 and t2 be equality-preserving expressions ([concepts.equality]) such that decltype((t1)) and decltype((t2)) are each T, and let u1 and u2 be equality-preserving expressions such that decltype((u1)) and decltype((u2)) are each U.
T and U model common_reference_with<T, U> only if:
  • C(t1) equals C(t2) if and only if t1 equals t2, and
  • C(u1) equals C(u2) if and only if u1 equals u2.
[Note 2: 
Users can customize the behavior of common_reference_with by specializing the basic_common_reference class template ([meta.trans.other]).
— end note]