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.
   The behavior of a program that adds specializations for alignment_of
   or alignment_of_v
   (since C++17) is undefined.
  Helper variable template
   template< class T > (since C++17)
   inline constexpr std::size_t alignment_of_v = alignment_of<T>::value; Inherited from std::integral_constant

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 obtain 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 uninitialized
   (C++11)(deprecated in C++23) storage for types of given size
                        (class template)
   aligned_union defines the type suitable for use as uninitialized
   (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)