C ++サポートの要約表11/14/17

特に業界の最新および標準に従うC ++開発者として、さまざまなコンパイラーによって標準C ++ 11(および1yと1z)が完全にサポートされているかどうか疑問に思っていましたか? はい、異なるピボットテーブルがありますが、ほとんどの場合、2つのコンパイラまたは同じコンパイラの2つのバージョンの比較、またはピボットテーブルですが、すでに古い、または不完全なリストです。 一般的に、Clang、GNU C ++、MSVC、およびIntel C ++の4つのコンパイラについて、私は座って完全な表(Clang-aリストとGCCに基づく)を作成しました。

注意! この表は、主に製品を作成する人を対象としています。 ライブラリを開発している場合は、もちろん、プライマリソースのサポート機能に精通することをお勧めします(または、すべてのテストを記述することをお勧めします)。 私にとって、それは主に「ああ! Range-forは既に問題なく使用できます。
標準の一部 C ++ 11の提案 クラン Gcc Vc Intel C ++
C ++ 11
右辺値参照 N2118 2.9 4.3 10.0-13.0 12.0
* thisの右辺値参照 N2439 2.9 4.8.1 13.0 14.0
右辺値によるクラスオブジェクトの初期化 N1610 2.9 4.0 11.1
非静的データメンバー初期化子 N2756 3.0 4.7 12.0-? 14.0
可変長テンプレート N2242 2.9 4.3 11.1 12.0
可変長テンプレートテンプレートパラメータの拡張 N2555 2.9 4.4 12.0 12.0
初期化子リスト N2672 3.1 4.4 11.1-? 13.0
静的アサーション N1720 2.9 4.3 10.0 11.0
自動入力された変数 N1984 2.9 4.4 10.0 11.0
マルチ宣言子自動 N1737 2.9 4.4 10.0 12.0
ストレージクラス指定子としてのautoの削除 N2546 2.9 4.4 10.0 11.0
新しい関数宣言子の構文 N2541 2.9 4.4 10.0 12.1
ラムダ式 N2927 3.1 4.5 10.0-11.0 12.0
式の宣言されたタイプ N2343 2.9 4.3 10.0-11.0 11.0
不完全な戻り型 N3276 3.1 4.8.1 12.0 12.0
直角ブラケット N1757 2.9 4.3 10.0 11.0
関数テンプレートのデフォルトのテンプレート引数 DR226 2.9 4.3 12.0 12.6
式のSFINAE問題を解決する DR339 2.9 4.4 12.6
エイリアステンプレート N2258 3.0 4.7 12.0 12.6
外部テンプレート N1987 2.9 4.0 10.0 9.0
ヌルポインター定数 N2431 3.0 4.6 10.0 12.1 *
厳密に型指定された列挙型 N2347 2.9 4.4 10.0-11.0 12.0
列挙型の前方宣言 N2764 DR1206 3.1 4.6 11.0 14.0
標準化された属性構文 N2761 3.3 * 4.8 12.1
一般化された定数式 N2235 3.1 4.6 13.0-? 13.0
アライメントのサポート N2341 3.3 4.8 10.0-13.0 15.0
条件付きサポート動作 N1627 2.9
未定義の動作を診断可能なエラーに変更する N1727 2.9
コンストラクターの委任 N1986 3.0 4.7 12.0 14.0
コンストラクターの継承 N2540 3.3 4.8 13.0 15.0
明示的な変換演算子 N2437 3.0 4.5 11.1 13.0
新しいキャラクタータイプ N2249 2.9 4.4 13.0 14.0
Unicode文字列リテラル N2442 3.0 4.5 13.0 11.0 *
生の文字列リテラル N2442 3.0 4.5 11.1 14.0
リテラル内のユニバーサルキャラクター名 N2170 3.1 4.5 12.6
ユーザー定義のリテラル N2765 3.1 4.7 13.0 15.0
標準レイアウトタイプ N2342 3.0 4.4 11.0 14.0
デフォルトの機能 N2346 3.0 4.4 12.0 12.0
削除された機能 N2346 2.9 4.4 12.0 12.0
拡張フレンド宣言 N1791 2.9 4.7 10.0 11.0
sizeofの拡張 N2253 DR850 3.1 4.4 13.0 14.0
インライン名前空間 N2535 2.9 4.4 13.0 14.0
無制限の組合 N2544 3.1 4.6 13.0 14.0 *
テンプレート引数としてのローカルおよび名前のないタイプ N2657 2.9 4.5 10.0 12.0
範囲ベース N2930 3.0 4.6 11.0 13.0
明示的な仮想オーバーライド N2928 N3206 N3272 3.0 4.7 10.0-11.0 12.0 *
ガベージコレクションの最小限のサポート

および到達可能性ベースのリーク検出
N2670 N / a N / a 10.0 15.0 *
移動コンストラクターがスローできるようにする[noexcept] N3050 3.0 4.6 13.0 14.0
特殊メンバー移動関数の定義 N3053 3.0 4.6 14.0
C ++ 11-並行性
シーケンスポイント N2239 3.3 4.0 N / a 15.0
原子操作 N2427 3.1 4.4 11.0 13.0
強力な比較と交換 N2748 3.1 * 4.5 11.0 13.0
双方向フェンス N2752 3.1 4.8 11.0 13.0
メモリモデル N2429 3.2 4.8 N / a 15.0 *
データ依存の順序付け:アトミックおよびメモリモデル N2664 3.2 * 4.4 11.0-? 15.0
例外の伝播 N2179 2.9 4.4 10.0 12.0
プロセスの放棄とat_quick_exit N2440 4.8 13.0 15.0 *
シグナルハンドラーでアトミックの使用を許可する N2547 3.1 4.0 15.0 *
スレッドローカルストレージ N2659 3.3 4.8 10.0-13.0 15.0 *
同時実行による動的な初期化と破棄 N2660 2.9 4.3 13.0 11.0 *
C ++ 11のC99機能
__func__事前定義識別子 N2340 2.9 4.3 10.0-13.0 11.0
C99プリプロセッサ N1653 2.9 4.3 10.0-? 11.1
長い長い N1811 2.9 4.3 10.0 9.0
拡張整数型 N1988 N / a 4.0 N / a 15.0 *
C ++ 14
特定のC ++コンテキスト変換の微調整 N3323 3.4 4.9 12.0
バイナリリテラル N3472 2.9 4.9 13.0 11.0
decltype(自動) N3638 3.3 4.8 13.0 15.0
通常の関数の戻り型の推論 3.4 4.9 13.0
初期化されたラムダキャプチャ N3648 3.4 4.9 13.0 15.0
汎用ラムダ N3649 3.4 4.9 13.0
可変テンプレート N3651 3.4 5.0
constexpr関数の要件を緩和する N3652 3.4 5.0
メンバー初期化子と集計 N3653 3.3 5.0
メモリ割り当ての明確化 N3664 3.4 N / a
[[非推奨]]属性 N3760 3.4 4.9 15.0 *
桁区切り記号としての単一引用符 N3781 3.4 4.9 13.0
C ++サイズの割り当て解除 N3778 3.4 いや 13.0
C ++ 1z
メッセージなしのstatic_assert N3928 3.5
デフォルトでトライグラフ展開を無効にする N4086 3.5 13.0
テンプレートテンプレートパラメーターのtypename N4051 3.5 5.0
直接リスト初期化の新しい自動ルール N3922 いや
折り畳み式 N4295 SVN
u8文字リテラル N4267 SVN
ネストされた名前空間の定義 N4230 SVN
名前空間と列挙子の属性 N4266 SVN
すべての非型テンプレート引数の定数評価を許可します N4268 SVN
下書き
SD-6:SG10機能テストの推奨事項 SD-6 3.4 5.0
SVN
[DRAFT TS]配列拡張(バインドされたランタイムの配列) N3820 いや 4.9
[ドラフトTS]ライブラリの基礎(呼び出しタイプの特性) N3908 いや
[ドラフトTS]コンセプト N3929 いや はい**
注。

参照資料
  1. CLang C ++ 11/14/17
  2. GCC: C ++ 11テーブル、 C ++ 14テーブル、 GCC 5に追加される機能強化のリスト
  3. 2012年に関連する、 Scott Meyersからのリンクのリスト
  4. MSVS 2013 C ++ 11C ++ 14
  5. Intel C ++ 11
  6. 遅れて発見-多くの異なるコンパイラーをサポートするテーブル (同一の英語版 )、リストのみが不完全です(80のうち40がここに表示されています)。


さらに読む:
  1. 効果的なモダンC ++:C ++ 11およびC ++ 14の使用を改善する42の特定の方法 (出版社へのリンク)。 スコット・マイヤーズ-効果的なモダンC ++(C ++ 11/14)
  2. C ++のツアー -Bjarne Stroustrup




PSそして、もちろん、あるコンパイラーが他のコンパイラーより優れているという結論を下す価値はありません。 表に示されているそれぞれには、独自のキラー機能とアプリケーションがあります。 ただし、深刻なプロジェクトでは、コンパイラは「構文バン」の数だけで考慮されることはありません(誇張)。 合理的である!



UPD :調査の結果から判断すると(予想どおり)、ほとんどの人はSTL情報が必要であると考えています。 この質問を少し研究した結果、同様の比較を行うのに1〜2時間もかからないことがわかりました。 ですから、私の手が届くならそれをします。その場合は、タイトルを( "... and STL")に変更します。 ブックマークにトピックを持っている人は誰でも、情報が更新されたことを知っています。



All Articles