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

NAME
     std::alignment_of - std::alignment_of

Synopsis
	Defined in header <type_traits>
	template< class T >		 (since C++11)
	struct alignment_of;

	Provides the member constant value equal to the alignment requirement of
     the type T,
	as  if obtained by an alignof expression. If T is an array type, returns
     the
	alignment requirements of the element type. If T is  a	reference  type,
     returns the
	alignment requirements of the type referred to.

	If alignof(T) is not a valid expression, the behavior is undefined.

	If the program adds specializations for std::alignment_of
	or std::alignment_of_v
	(since C++17), the behavior is undefined.

Member constants
	value	 alignof(T)
	[static] (public static member constant)

Member functions
	operator std::size_t converts the object to std::size_t, returns value
			     (public member function)
	operator()	     returns value
	(C++14) 	     (public member function)

Member types
	Type	   Definition
	value_type std::size_t
	type	   std::integral_constant<std::size_t, value>

Possible implementation
	template<class T>
	struct	alignment_of  :  std::integral_constant<std::size_t, alignof(T)>
     {};

Notes
	This type trait predates the alignof keyword, which can be used  to  ob-
     tain the same
	value with less verbosity.

Example
     // Run this code

      #include <cstdint>
      #include <iostream>
      #include <type_traits>

      struct A {};
      struct B
      {
	  std::int8_t p;
	  std::int16_t q;
      };

      int main()
      {
	  std::cout << std::alignment_of<A>::value << ' ';
	  std::cout << std::alignment_of<B>::value << ' ';
	  std::cout << std::alignment_of<int>() << ' '; // alt syntax
	  std::cout << std::alignment_of_v<double> << '\n'; // c++17 alt syntax
      }

Possible output:
      1 2 4 8

See also
	alignof operator(C++11)      queries alignment requirements of a type
	alignas specifier(C++11)     specifies that the storage for the variable
     should be
				     aligned by specific amount
	aligned_storage 	     defines the type suitable for use as unini-
     tialized
	(C++11)(deprecated in C++23) storage for types of given size
				     (class template)
	aligned_union		     defines the type suitable for use as unini-
     tialized
	(C++11)(deprecated in C++23) storage for all given types
				     (class template)
	max_align_t		      trivial type with alignment requirement as
     great as any
	(C++11) 		     other scalar type
				     (typedef)

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

home | help