最終更新日時: 2026年05月07日 12時33分06秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<meta>

# std::meta::offset_of(C++26)

    namespace std::meta {
      consteval member_offset offset_of(info r);
    }

## 概要

メンバ変数や基底クラスのオフセットを取得する。

以下のいずれかを表すリフレクションを受け取れる：

- メンバ変数
- 無名ビットフィールド
- 直接基底クラス関係（仮想基底クラスかつ派生クラスが抽象クラスである組み合わせは除く）

## 戻り値

`r`が上記のいずれかを表す場合、所属するクラスの先頭からのオフセットを`member_offset`として返す。

## 例外

`r`が上記のいずれも表さない場合、`std::meta::exception` 例外を送出する。

## 例

    #include <meta>
    #include <print>

    struct S {
      char a;
      int b;
      double c;
    };

    int main() {
      std::println("sizeof(S) = {}", sizeof(S));

      template for (constexpr auto m :
          std::define_static_array(std::meta::nonstatic_data_members_of(
              ^^S, std::meta::access_context::unchecked()))) {
        constexpr auto off = std::meta::offset_of(m);
        std::println("{}: offset = {} bytes, size = {}",
          std::meta::identifier_of(m),
          off.bytes,
          std::meta::size_of(m));
      }
    }

#### 出力例

    sizeof(S) = 16
    a: offset = 0 bytes, size = 1
    b: offset = 4 bytes, size = 4
    c: offset = 8 bytes, size = 8

## バージョン

### 言語

- C++26

### 処理系

- Clang: ??
- GCC: 16 (`-freflection` オプション指定) ✅
- Visual C++: ??

## 関連項目

- `member_offset`
- `size_of`
- `alignment_of`

## 参照

- P2996R13 Reflection for C++26