Skip to content

Latest commit

 

History

History
40 lines (27 loc) · 1.55 KB

narrowing_contextual_conversions_to_bool.md

File metadata and controls

40 lines (27 loc) · 1.55 KB

定数式の文脈でのboolへの縮小変換を許可

  • cpp23[meta cpp]

概要

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 縮小変換

関連項目

参照