最終更新日時: 2025年07月13日 15時17分26秒 (JST)
Koichi Murase が更新

履歴 編集

type-alias
<cstddef>

# std::max_align_t(C++11)

    namespace std {
      using max_align_t = object-type;
    }

## 概要

`std::max_align_t`のアライメントサイズは、スカラー型の中の最も大きなアライメントサイズと同じかそれ以上である。

この型は、C++11ではPOD型、C++20ではトリビアル型に分類される。

`alignas`指示子により、`std::max_align_t`のアライメントより大きいサイズのアライメントを指定できるかどうかは、実装依存である。

## 例

    #include <iostream>
    #include <cstddef>
    #include <type_traits>

    int main()
    {
      std::cout << "sizeof(max_align_t): " << sizeof(std::max_align_t) << std::endl;
      std::cout << "alignof(max_align_t): " << alignof(std::max_align_t) << std::endl;
      static_assert(alignof(std::max_align_t) >= alignof(long long), "");
      static_assert(alignof(std::max_align_t) >= alignof(long double), "");

      std::cout << "is_object<max_align_t>: " << std::is_object<std::max_align_t>::value << std::endl;
      std::cout << "is_scalar<max_align_t>: " << std::is_scalar<std::max_align_t>::value << std::endl;
      std::cout << "is_union<max_align_t>: " << std::is_union<std::max_align_t>::value << std::endl;
      std::cout << "is_array<max_align_t>: " << std::is_array<std::max_align_t>::value << std::endl;
      std::cout << "is_class<max_align_t>: " << std::is_class<std::max_align_t>::value << std::endl;
      std::cout << "is_pod<max_align_t>: " << std::is_pod<std::max_align_t>::value << std::endl;
    }

### 出力例

    sizeof(max_align_t): 24
    alignof(max_align_t): 8
    is_object<max_align_t>: 1
    is_scalar<max_align_t>: 0
    is_union<max_align_t>: 0
    is_array<max_align_t>: 0
    is_class<max_align_t>: 1
    is_pod<max_align_t>: 1

## バージョン

### 言語

- C++11

### 処理系

- Clang: 3.5 ✅
- GCC: 4.9 ✅
- ICC: ??
- Visual C++: 2012 ✅, 2013 ✅, 2015 ✅

## 関連項目

- C++20 PODを非推奨化

## 参照

- P0767R1 Deprecate POD
  - C++20でPOD用語の非推奨化にともない、この型がPOD型ではなくトリビアル型に分類されるよう規定が変更された