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++: ??