- meta[meta header]
- std::meta[meta namespace]
- function[meta id-type]
- cpp26[meta cpp]
namespace std::meta {
consteval size_t alignment_of(info r);
}- info[link info.md]
型、オブジェクト、値、変数、メンバ変数、または基底クラス関係のアライメントを取得する。
rが以下のいずれかを表す場合、そのアライメントを返す:
- 型
- オブジェクト
- 参照型でない変数
- ビットフィールドでないメンバ変数
- 直接基底クラス関係
- ビット幅を持たないデータメンバ記述(
data_member_spec()で生成されるもの。アライメント指定があればその値、なければ型のアライメント)
以下のすべてを満たさない場合、std::meta::exception例外を送出する:
dealias(r)が、型・オブジェクト・参照型でない変数・ビットフィールドでないメンバ変数・直接基底クラス関係・ビット幅を持たないデータメンバ記述のいずれかを表すことdealias(r)が型を表す場合、is_complete_type(r)がtrueであること
#include <meta>
int main() {
static_assert(std::meta::alignment_of(^^int) == alignof(int));
static_assert(std::meta::alignment_of(^^double) == alignof(double));
}- C++26
- Clang: ??
- GCC: 16 (
-freflectionオプション指定) [mark verified] - Visual C++: ??
- P2996R13 Reflection for C++26
- LWG Issue 4429.
meta::alignment_ofshould exclude data member description of bit-field- C++26で、ビットフィールドのデータメンバ記述(ビット幅
Wが⊥でないもの)を渡した場合に例外を送出することが明確化された
- C++26で、ビットフィールドのデータメンバ記述(ビット幅