This implementation probably answers this request:
template <class T, std::size_t Align> struct alignas(Align) aligned_storage { T a; T b; }; template <class T, std::size_t Align> struct aligned_storage_members { alignas(Align) T a; alignas(Align) T b; }; int main(int argc, char *argv[]) { aligned_storage<uint32_t, 8> as; std::cout << &as.a << " " << &as.b << std::endl; aligned_storage_members<uint32_t, 8> am; std::cout << &am.a << " " << &am.b << std::endl; }
The first structure (which can be defined as a class, of course) is 8-byte aligned , while the second structure is not aligned on its own, but rather each of the 8-byte members is aligned .
source share