C++1zの言語拡張まとめ

2017年中に改訂される予定のC++14の次のバージョン、仮称C++1zの更新内容をまとめました。正式名称はISO/IEC 14882:2017、通称C++17になる予定です。

C++1zの概要

C++17は、C++11ほど大きな変更はありませんが、重要な言語機能(構造化束縛とか)や、広く適用できるライブラリ機能が多く入っています。ライブラリは、ファイルシステムが入るのが大きいですね。ようやく標準ライブラリのみで、ファイルサイズを取得したり、ファイルのコピーや移動などを扱えるようになります。

策定体制として、Study Group (SG)と呼ばれる専門家グループがたくさん作られ、そこで同時並行に議論、策定が進められていた仕様のうち、固まったものがいくつかC++1zで導入されます。

それぞれの専門家グループで考えられた仕様はTechnical Specification (TS)という単位で個別に各国の承認をとっており、コンパイラでもstd::exprerimental名前空間以下などで実験的に実装されていました。C++1zでは専門家グループで進められた仕様のうち、以下のものが入ります:

  • Library Fundamentals TS (基本的なライブラリ機能)
    • any, optional, string_view, メモリプール, 検索アルゴリズム, サンプリングアルゴリズム, タプルを展開して関数呼び出しするapply関数, shared_ptrの配列対応, 最大公約数と最小公倍数など
  • Filesystem TS (ファイルシステムのライブラリ)
  • Parallelism TS (並列ライブラリ)

C++1zでは間に合わないですが、継続して議論が進められているTSもまだまだあり、このあと仕様が固まったものは、C++1zの次のバージョンC++2x (2020年、C++20予定) に入る予定です。そのなかには、コンセプト、モジュールシステム、トランザクショナルメモリ、並行コンテナ、コルーチン、ネットワークなどがあります。

TS以外の機能としても、多くの便利な機能が入ります。構造化束縛やif constexpr文などは、とくに便利ですね。


コア言語

言語機能の更新内容です。

変数・データ構造関係

制御構文

ラムダ式

テンプレート

定数式

名前空間

例外

属性

プリプロセッサ

機能の削除

古くから非推奨だった機能が削除されます。非推奨になった機能は数バージョン先に削除される可能性がありますので、ご注意ください。


ライブラリ

標準ライブラリの更新内容です。

新ライブラリ

コンテナ

文字列

アルゴリズム

並行処理

スマートポインタ

数学

タプル

型特性

時間演算

乱数

エラーハンドリング

取り決め

機能の削除

古くから非推奨だった機能や、コンパイラの実装が不十分でユーザーにも使われてこなかった機能などが削除されます。非推奨になった機能は数バージョン先に削除される可能性がありますので、ご注意ください。

機能の非推奨化


まとめていない主な機能

これのほかにも、まとめていない細かい更新はたくさんあります。詳細な更新リストは、cpprefjp/siteリポジトリの以下のWikiページを参照してください。


お断り

この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。