#
If T and U can both be explicitly converted to some third type, C, then T and U share a common type, C.
[Note 1: 
C can be the same as T or U, or can be a different type.
C is not necessarily unique.
— end note]
template<class T, class U> concept common_with = same_as<common_type_t<T, U>, common_type_t<U, T>> && requires { static_cast<common_type_t<T, U>>(declval<T>(); static_cast<common_type_t<T, U>>(declval<U>(); } && common_reference_with< add_lvalue_reference_t<const T>, add_lvalue_reference_t<const U>> && common_reference_with< 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 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_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_with by specializing the common_type class template ([meta.trans.other]).
— end note]

Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant