最終更新日時: 2026年05月11日 13時00分09秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<meta>

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

    namespace std::meta {
      consteval bool is_structural_type(info type);
    }

## 概要

構造的型 (structural type) であるかを判定する。`std::is_structural`に対応する。

構造的型は、定数テンプレートパラメータとして使用できる型である。具体的には以下のいずれかである：

- スカラ型
- 左辺値参照型
- 直接基底クラスとメンバ変数がすべて`public`かつ`mutable`でなく、それらの型がすべて構造的型（または構造的型の配列）であるリテラルクラス型
- キャプチャを持たないラムダ式のクロージャ型

なお、右辺値参照型は構造的型ではない。

## 戻り値

`type`が構造的型を表す場合に`true`を返す。

## 例外

`type`が型を表さない場合、`std::meta::exception` 例外を送出する。

## 例

    #include <meta>

    struct Structural {
      int x;
      double y;
    };

    struct NotStructural {
    private:
      int x;  // privateメンバがあるため構造的型ではない
    };

    int main() {
      static_assert(std::meta::is_structural_type(^^int));
      static_assert(std::meta::is_structural_type(^^int&));
      static_assert(std::meta::is_structural_type(^^Structural));
      static_assert(!std::meta::is_structural_type(^^NotStructural));
      static_assert(!std::meta::is_structural_type(^^int&&));  // 右辺値参照は構造的型ではない
    }

### 出力

## バージョン

### 言語

- C++26

### 処理系

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

## 関連項目

- `std::is_structural`

## 参照

- P3856R8 New reflection metafunction - is_structural_type (US NB comment 49)