| Home | Libraries | People | FAQ | More

### alignment_of

    template <class T>
    struct alignment_of : public integral_constant<std::size_t, ALIGNOF(T)> {};

Inherits: Class template `alignment_of` inherits from `integral_constant<std::size_t, ALIGNOF(T)>`, where `ALIGNOF(T)` is the alignment of type T.

Note: strictly speaking you should only rely on the value of `ALIGNOF(T)` being a multiple of the true alignment of T, although in practice it does compute the correct value in all the cases we know about.

Header: `#include <boost/type_traits/alignment_of.hpp>` or `#include <boost/type_traits.hpp>`

Examples:

> `alignment_of<int>` inherits from `integral_constant<std::size_t, ALIGNOF(int)>`.

> `alignment_of<char>::type` is the type `integral_constant<std::size_t, ALIGNOF(char)>`.

> `alignment_of<double>::value` is an integral constant expression with value `ALIGNOF(double)`.

> `alignment_of<T>::value_type` is the type `std::size_t`.

| Important

Visual C++ users should note that MSVC has varying definitions of "alignment". For example consider the following code:

    typedef long long align_t;
    assert(boost::alignment_of<align_t>::value % 8 == 0);
    align_t a;
    assert(((std::uintptr_t)&a % 8) == 0);
    char c = 0;
    align_t a1;
    assert(((std::uintptr_t)&a1 % 8) == 0);

In this code, even though `boost::alignment_of<align_t>` reports that `align_t` has 8-byte alignment, the final assert will fail for a 32-bit build because `a1` is not aligned on an 8 byte boundary. Note that had we used the MSVC intrinsic `__alignof` in place of `boost::alignment_of` we would still get the same result. In fact for MSVC alignment requirements (and promises) only really apply to dynamic storage, and not the stack.