W3cubDocs

/C++

std::alignment_of

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

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.

Helper variable template

template< class T >
constexpr std::size_t alignment_of_v = alignment_of<T>::value;
(since C++17)

Inherited from std::integral_constant

Member constants

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

Member functions

operator std::size_t
converts the object to std::size_t, returns value
(public member function)
operator()
(C++14)
returns value
(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

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

Output:

1
4
8

See also

alignof operator queries alignment requirements of a type (since C++11)
defines the type suitable for use as uninitialized storage for types of given size
(class template)
defines the type suitable for use as uninitialized storage for all given types
(class template)
(C++11)
POD type with alignment requirement as great as any other scalar type
(typedef)
(library fundamentals TS)
variable template alias of std::alignment_of::value
(variable template)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/types/alignment_of