C++17

C++17は、プログラミング言語C++の国際規格ISO/IEC 14882:2017の略称である。

 廃止された機能 

今回の改定では新機能の追加のみではなく、いくつかの機能が廃止されている。
 トライグラフの廃止IBM comment on preparing for a Trigraph-adverse future in C++17, IBM paper N4210, 2014-10-10. Authors: Michael Wong, Hubert Tong, Rajan Bhakta, Derek Inglis。
 標準ライブラリから、すでに非推奨になっていた std::auto_ptr, std::random_shuffle を含むいくつかの型や関数、古い関数アダプタが取り除かれた。これらはC++11で std::unique_ptr、std::shuffle、std::bind、ラムダのような改良された手段に取って代わられた。
 (すでに非推奨となっていた) 記憶域クラス指定子としてのキーワードの廃止。キーワード自体は未使用で予約される。

 新機能 
 言語 
 の診断メッセージを省略可能とした。
 テンプレートのテンプレートのパラメータに ( の代わりに)  を使えるようにした。
 初期化リストからの型推論 () 規則を新設。
 入れ子の名前空間の定義を 等とする代わりにと書けるようにした。
 名前空間や列挙型に属性を書けるようにした。
 新たに、、属性を標準に追加。
 UTF-8 () 文字リテラルUTF-8 文字列リテラルは C++11 から存在する。C++17 では一貫性確保のために対応する文字リテラルが追加されるが、その型はchar型であり、またUTF-8文字リテラルが扱えるコードポイントの範囲は、C0制御文字とラテン基本文字 (C0 Controls and Basic Latin Unicode block) すなわち ASCII に限定されている。なお、C++標準における従来の文字リテラルは、文字符号化方式がASCIIであることが保証されないため、UTF-8文字リテラルはASCIIを保証するという移植性の観点からも有用である。。
 十六進浮動小数点リテラル。
 全ての非型テンプレート引数における定数評価。
 における畳み込み式。
 の形式によるコンパイル時の静的。
 構造化束縛宣言。のように書くことができるようになった。
 文および文での初期化子。
  型 (トップレベルのcv修飾を無視する) の純粋右辺値式から型のオブジェクトをコピー初期化および直接初期化するとき、純粋右辺値式からコピーコンストラクタやムーブコンストラクタが呼ばれなくなった。詳細は「コピーの省略」を参照のこと。
 over-aligned なメモリ確保に関する拡張。
 クラステンプレートの実引数推定 (Class Template Argument Deduction: CTAD)。コンストラクタの推定ガイドが導入されたことで、のようなコンストラクタの引数の型や、のようなヘルパー関数テンプレートが必要なくなり、のように書くことができるようになった。
 インライン変数により、に反することなくヘッダファイルで変数を定義できるようになった。効果はインライン関数と同様である。
 でヘッダが利用可能かをプリプロセッサディレクティブで確認できるようになった。
 の値はとなった。
 例外指定が関数の型の一部となった。

 ライブラリ 
以下のヘッダが追加された。

 <any> — あらゆる型を保持できる std::any クラス
 <filesystem> — ディレクトリやファイルの操作
 <optional> — 有効または無効な値を保持する std::optional クラス
 <string_view> — 読み取り専用で所有権を持たずに文字シーケンスを参照する std::basic_string_view クラス 
 <variant> — 型安全な共用体（union）std::variant クラス

 脚注 

 関連項目 
 C++11
 C++14

 外部リンク 
 The C++ Standards Committee

Category:C++