home | help
std::same_as(3) 	       C++ Standard Libary		 std::same_as(3)

NAME
     std::same_as - std::same_as

Synopsis
	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.

	std::same_as<T, U> subsumes std::same_as<U, T> and vice versa.

Possible implementation
	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

      #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)

http://cppreference.com 	   2024.06.10			 std::same_as(3)

home | help