namespace std::meta {
consteval std::size_t bit_size_of(info r);
}
概要
ビットサイズを取得する。
以下のいずれかを表すリフレクションを受け取れる:
- 型
- オブジェクト
- 値
- 参照型でない変数
- メンバ変数(ビットフィールドを含む)
- 無名ビットフィールド
- 直接基底クラス関係
戻り値
rがビットフィールドまたは無名ビットフィールドを表す場合、そのビット幅を返す。
それ以外(型、オブジェクト、値、参照型でない変数、ビットフィールドでないメンバ変数、直接基底クラス関係)を表す場合、CHAR_BIT * size_of(r)を返す。
例外
rが上記のいずれも表さない場合、std::meta::exception例外を送出する。
例
#include <meta>
#include <climits>
struct Flags {
unsigned a : 1;
unsigned b : 3;
int c;
};
consteval bool check() {
// 型のビットサイズ: CHAR_BIT * size_of(int)
static_assert(std::meta::bit_size_of(^^int) == CHAR_BIT * sizeof(int));
// ビットフィールドのビット幅
auto members = std::meta::nonstatic_data_members_of(
^^Flags, std::meta::access_context::unchecked());
return std::meta::bit_size_of(members[0]) == 1 // a: 1
&& std::meta::bit_size_of(members[1]) == 3 // b: 3
&& std::meta::bit_size_of(members[2]) == CHAR_BIT * sizeof(int); // c: CHAR_BIT * sizeof(int)
}
int main() {
static_assert(check());
}
出力
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: 16 (
-freflectionオプション指定) ✅ - Visual C++: ??