home | help
std::is_cor...ding_member(3)   C++ Standard Libary  std::is_cor...ding_member(3)

NAME
     std::is_corresponding_member - std::is_corresponding_member

Synopsis
	Defined in header <type_traits>
	template< class S1, class S2, class M1, class M2 >
	constexpr  bool  is_corresponding_member(  M1  S1::*  mp,  M2 S2::* mq )
     (since C++20)
	noexcept;

	Determines whether mp and mq refer corresponding members in  the  common
     initial
	sequence  of  S1 and S2. The program is ill-formed if either S1 or S2 is
     an incomplete
	type.

	If either S1 or S2 is not a StandardLayoutType, or either M1  or  M2  is
     not an object
	type,  or  either  mp  or  mq  is equal to nullptr, the result is always
     false.

Parameters
	mp, mq - pointers-to-member to detect

Return value
	true if mp and mq refer corresponding members in the common initial  se-
     quence of S1
	and S2, otherwise false.

Notes
	The  type  of a pointer-to-member expression &S::m is not always M S::*,
     where m is of
	type M, because m may be a member inherited from a base class of S.  The
     template
	arguments  can be specified in order to avoid potentially surprising re-
     sults.

Example
     // Run this code

      #include <type_traits>

      struct Foo
      {
	  int x;
	  double d;
      };

      struct Bar
      {
	  int y;
	  double z;
      };

      struct Baz : Foo, Bar {}; // not standard-layout

      static_assert(
	  std::is_same_v<decltype(&Baz::x), int Foo::*> == true &&
	  std::is_same_v<decltype(&Baz::y), int Bar::*> == true &&
	  std::is_corresponding_member(&Foo::x, &Bar::y) == true &&
	  std::is_corresponding_member(&Foo::d, &Bar::z) == true &&
	  std::is_corresponding_member(&Baz::x, &Baz::y) == true &&
	  std::is_corresponding_member<Baz, Baz, int, int>(&Baz::x, &Baz::y)  ==
     false
      );

      int main() {}

See also
	is_standard_layout	 checks if a type is a standard-layout type
	(C++11) 		 (class template)
	is_layout_compatible	 checks if two types are layout-compatible
	(C++20) 		 (class template)
	is_member_object_pointer  checks  if a type is a pointer to a non-static
     member object
	(C++11) 		 (class template)

http://cppreference.com 	   2024.06.10	    std::is_cor...ding_member(3)

home | help