• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

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

    このページはC++23に採用された言語機能の変更を解説しています。

    のちのC++規格でさらに変更される場合があるため関連項目を参照してください。

    概要

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

    関連項目

    参照