GCC 5.0のC++関係機能

https://gcc.gnu.org/gcc-5/changes.html

網羅的ではなく、気になったものだけ抽出して書いています。

C++11、C++14関係の対応状況は、cpprefjpサイトにもほぼ反映しました。

  • C++14を全実装
    • 変数テンプレート
    • 宣言時のメンバ初期化を持つ型の集成体初期化を許可
    • constexprの制限緩和
    • サイズ付きデアロケーション
  • -std=c++14オプションが使えるようになる。旧-std=c++1yオプションは非推奨。
  • C++11周りのライブラリサポート改善
    • std::listsize()メンバ関数が、デフォルトでO(1)になる
    • std::dequestd::vector<bool>に、ステートフルアロケータのサポートを追加。
    • iostreamのクラスに、ムーブとswapのサポートを追加。
    • std::alignstd::aligned_unionのサポートを追加。
    • is_trivially_*系の型特性を追加。
    • IOマニピュレータのput_timehexfloatdefaultfloatのサポートを追加。
    • std::isblankジェネリックロケールで使えるようになった。
    • std::shared_ptrのアトミック操作をサポート。
    • std::notify_all_at_thread_exit()系の、スレッド終了時にfutureを準備完了状態にする機能をサポート。
  • C++14ライブラリ
    • is_final型特性を実装
  • C++14後のLibrary Fundamentals TSの機能を追加。std::experimental名前空間で定義される。
    • anyクラス(boost::anyと同じ)
    • apply関数(タプルを展開して関数実行)
    • sample関数(コンテナからN個の要素をランダム選択)
    • search関数(文字列特化した探索アルゴリズム)
    • 変数テンプレートの型特性をいくつか
    • not_fn関数(not1not2を統合し、改善したもの)
  • 新しい警告オプションとして、-Wsuggest-final-typesが入る。「このクラスにはfinalを付けたほうがいいよ」とオススメしてくれる。
  • 拡張機能として、乱数の分布クラスlogistic_distribution(ロジスティック分布)とuniform_on_sphere_distribution(球状の一様分布、Boost.Randomにある)を追加。
  • IntelのCilk Plusをフルサポート。並列関係の新しい言語拡張。
  • Clangにもある__has_includeをサポート。ヘッダファイルがあるかどうかを調べられる。