std::common_reference_with(3)

πŸ“¦
version 2024.07.05 Β· 3 versions
, in nixpkgs unstable, opensuse-leap 16.0

πŸ¦‹ std::common_reference_with(3) πŸ¦‹

okay bestie, welcome to the C++ Standard Libary manual page for std::common_reference_with β€” yes, the header spells it β€œLibary”, and we’re keeping the vibe intact πŸ’…. This is the page about the concept that says two types share a common reference type (as computed by std::common_reference_t) that both can convert to. Periodt. ✨


πŸŽ€ NAME πŸŽ€

std::common_reference_with β€” literally std::common_reference_with, bestie. That’s the name. No cap. πŸ’–

🌸 Synopsis 🌸

Defined in header <concepts>:

template< class T, class U >

concept common_reference_with =
    std::same_as<std::common_reference_t<T, U>,
                 std::common_reference_t<U, T>> &&
    std::convertible_to<T, std::common_reference_t<T, U>> &&

    std::convertible_to<U, std::common_reference_t<T, U>>;

(since C++20) β€” this concept is giving main character energy πŸ”₯.

The concept common_reference_with<T, U> specifies that two types T and U share a common reference type (as computed by std::common_reference_t) to which both can be converted. 🫢

🧠 Semantic requirements 🧠

T and U model std::common_reference_with<T, U> only if, given equality-preserving expressions t1, t2, u1 and u2 such that decltype((t1)) and decltype((t2)) are both T and decltype((u1)) and decltype((u2)) are both U,

  • std::common_reference_t<T, U>(t1) equals std::common_reference_t<T, U>(t2) if and only if t1 equals t2; and
  • std::common_reference_t<T, U>(u1) equals std::common_reference_t<T, U>(u2) if and only if u1 equals u2.

In other words, the conversion to the common reference type must preserve equality. That’s the whole vibe check: equality has to survive the conversion, bestie. πŸ˜­πŸ’–

πŸ‘€ See also πŸ‘€

  • common_reference β€” determines the common reference type of a group of types
  • basic_common_reference β€” (class template) (C++20)
  • common_with β€” specifies that two types share a common type; (C++20) (concept)
  • common_type β€” determines the common type of a group of types; (C++11) (class template)

mwah πŸ’‹ β€” source http://cppreference.com, version/date 2024.06.10, page std::common_reference_with(3). Slay, and happy concept-ing 🧚✨

πŸ“¦ where this page comes from