std::same_as(3)

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

πŸ’– NAME πŸ’–

Okay so welcome to std::same_as(3), bestie β€” straight outta the C++ Standard Libary (yes, that spelling is in the header, we’re not fixing it πŸ™ˆ).

std::same_as β€” std::same_as. That’s the whole name, no plot twist, periodt πŸ’…


πŸŒ€ Synopsis πŸŒ€

It lives in the header <concepts>, and it’s been here since C++20, iconic behavior:

          Defined in header <concepts>
          template< class T, class U >        (since C++20)
          concept same_as = /* see below */;

The concept same_as<T, U> is satisfied if and only if T and U denote the same type. Literally type equality, no cap ✨

Also important: std::same_as<T, U> subsumes std::same_as<U, T> and vice versa. Mutual subsumption, we love to see it 🫢


πŸ› οΈ Possible implementation πŸ› οΈ

One possible implementation, and it’s giving helper-concept realness:

          namespace detail
          {
              template< class T, class U >
              concept SameHelper = std::is_same_v<T, U>;
          }

          template< class T, class U >
          concept same_as = detail::SameHelper<T, U> && detail::SameHelper<U,
       T>;

🌸 Example 🌸

Run this code, bestie, it’s a whole little printable-types moment 🧚:

       // Run this code

        #include <concepts>
        #include <iostream>

        template<typename T, typename ... U>
        concept IsAnyOf = (std::same_as<T, U> || ...);

        template<typename T>
        concept IsPrintable = std::integral<T> || std::floating_point<T> ||
            IsAnyOf<std::remove_cvref_t<std::remove_pointer_t<std::decay_t<T>>>,
       char, wchar_t>;

        void println(IsPrintable auto const ... arguments)
        {
            (std::wcout << ... << arguments) << '\n';
        }

        int main()
        {
            println("Example: ", 3.14, " : ", 42, " : [", 'a', L'-', L"Z]");
        }

Output:

Example: 3.14 : 42 : [a-Z]

πŸ‘€ See also πŸ‘€

  • is_same β€” checks if two types are the same (C++11) (class template) πŸ‘‘

Okay bye bestie πŸ’– this page came from http://cppreference.com, dated 2024.06.10, and it’s std::same_as(3) β€” source/version/date all accounted for, mwah πŸŽ€

πŸ“¦ where this page comes from