最終更新日時(UTC):
が更新

履歴 編集

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

処理系

関連項目

参照