Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

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 com-
       mon 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
       sequence	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
       results.

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-sta-
       tic member object
	  (C++11)		   (class template)

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

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::is_corresponding_member&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help