fork download
  1. #include <iostream>
  2. #include <typeinfo>
  3.  
  4. using namespace std;
  5.  
  6. struct alignas(256) D {
  7. char a;
  8. char b;
  9. };
  10.  
  11. template<typename T>
  12. void* alloc(size_t n) {
  13. return reinterpret_cast<void*>(new
  14. aligned_storage<sizeof(T), alignof(T)>[n]);
  15. }
  16.  
  17. template<typename T>
  18. int allocSize() {
  19. cout << "sizeof = " << sizeof(T) << ", alignof = " << alignof(
  20. T) << endl;
  21. cout << "type = " << typeid(typename
  22. aligned_storage<sizeof(T), alignof(T)>::type).name() << endl;
  23. return sizeof(typename
  24. aligned_storage<sizeof(T), alignof(T)>::type);
  25. }
  26.  
  27.  
  28. int main() {
  29. cout << allocSize<D>() << endl;
  30. cout << alloc<D>(5) << endl;
  31. }
  32.  
  33.  
Success #stdin #stdout 0s 4324KB
stdin
Standard input is empty
stdout
sizeof = 2, alignof = 1
type = NSt15aligned_storageILm2ELm1EE4typeE
2
0x561e6c6dec30