7 Concepts library [concepts.lib]

7.3 Core language concepts [concepts.lib.corelang]

7.3.5 Concept CommonReference [concepts.lib.corelang.commonref]

For two types T and U, if common_reference_t<T, U> is well-formed and denotes a type C such that both ConvertibleTo<T, C> and ConvertibleTo<U, C> are satisfied, then T and U share a common reference type, C. [ Note: C could be the same as T, or U, or it could be a different type. C may be a reference type. C need not be unique. — end note ]

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

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

Note: Users can customize the behavior of CommonReference by specializing the basic_common_reference class template ([meta.trans.other]). — end note ]