今回の改定では新機能の追加のみではなく、いくつかの機能が廃止されている。
static_assertの診断メッセージを省略可能とした[6]。class の代わりに) typename を使えるようにした[7]。auto) 規則を新設[8][3]。namespace X { namespace Y { … } }等とする代わりにnamespace X::Y { … }と書けるようにした[3][9]。[[fallthrough]]、[[maybe_unused]]、[[nodiscard]]属性を標準に追加[12]。u8) 文字リテラル[10][13][14]。if constexpr(expression)の形式によるコンパイル時の静的if[19]。auto [a, b] = getTwoReturnValues();のように書くことができるようになった[20]。if文およびswitch文での初期化子[21]。T型 (トップレベルのcv修飾を無視する) の純粋右辺値式からT型のオブジェクトをコピー初期化および直接初期化するとき、純粋右辺値式からコピーコンストラクタやムーブコンストラクタが呼ばれなくなった。詳細は「コピーの省略」を参照のこと。std::pair<double, bool>(5.0, false)のようなコンストラクタの引数の型や、std::make_pair(5.0, false)のようなヘルパー関数テンプレートが必要なくなり、std::pair(5.0, false)のように書くことができるようになった[23][24]。__has_includeでヘッダが利用可能かをプリプロセッサディレクティブで確認できるようになった[25]。__cplusplusの値は201703Lとなった[26]。以下のヘッダが追加された。
char型であり、またUTF-8文字リテラルが扱えるコードポイントの範囲は、C0制御文字とラテン基本文字 (C0 Controls and Basic Latin Unicode block) すなわち ASCII に限定されている。なお、C++標準における従来の文字リテラルは、文字符号化方式がASCIIであることが保証されないため、UTF-8文字リテラルはASCIIを保証するという移植性の観点からも有用である。未登録
IPFS未登録
📡 0ピア
N=1
CRITICAL
PQS B63