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

履歴 編集

function
<meta>

std::meta::bit_size_of(C++26)

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

処理系

関連項目

参照