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

履歴 編集

定数式の文脈でのboolへの縮小変換を許可(C++23)

概要

C++23では、以下の定数式文脈でのboolへの縮小変換を許可する:

  • static_assert
  • if constexpr

これにより、整数値からboolへの変換 (ビットフラグの判定などで使われる)、スコープをもたない列挙値型からboolへの変換ができる定数式の条件式内でできるようになる。

ただしexplicit(bool)およびnoexcept(bool)のパラメータについては縮小変換が許可されないため、整数値として値10のどちらかしか指定できず、noexcept(sizeof(char[2]))のようなコードはコンパイルエラーとなる。

static_assertの例

// 整数値が0でなければtrue、そうでなければfalse
static_assert(bool(N)); // これまでの書き方
static_assert(N);       // C++23以降

static_assert(sizeof(int[2])); // C++23:OK 縮小変換

if constexprの例

if constexpr(bool(flags & Flags::Exec)) {  }  // これまでの書き方
if constexpr((flags & Flags::Exec) != 0) {  } // これまでの書き方
if constexpr(flags & Flags::Exec) {  }        // C++23以降

if constexpr (sizeof(int[2])) {  } // C++23:OK 縮小変換

関連項目

参照