特に業界の最新および標準に従う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 | いや | はい** | | |
注。
- テーブルは不正確な場合があります。ほとんどの場合、手動で作成されたためです。
- 標準ライブラリの機能のサポートは示されていません(緊急のリクエストに応じて追加します)。
- *ニュアンスがあることを意味します(ただし、完全にサポートされています)。 たとえば、コマンドラインオプション-ソースを読み取ります。
- いいえ-この機能はまだサポートされていません。
- N / A-サポートする能力は不可能であるか、まったく計画されていません
- MSVCの場合、部分サポートと完全サポートの2つのバージョンがある場合、範囲が示されます。 完全サポートがまだ発表されていない場合、範囲の後の2番目の値は疑問符です。
- ** GCC Concepts Liteブランチ。
参照資料
- CLang C ++ 11/14/17
- GCC: C ++ 11テーブル、 C ++ 14テーブル、 GCC 5に追加される機能強化のリスト
- 2012年に関連する、 Scott Meyersからのリンクのリスト
- MSVS 2013 C ++ 11 、 C ++ 14
- Intel C ++ 11
- 遅れて発見-多くの異なるコンパイラーをサポートするテーブル (同一の英語版 )、リストのみが不完全です(80のうち40がここに表示されています)。
さらに読む:
- 効果的なモダンC ++:C ++ 11およびC ++ 14の使用を改善する42の特定の方法 (出版社へのリンク)。 スコット・マイヤーズ-効果的なモダンC ++(C ++ 11/14)
- C ++のツアー -Bjarne Stroustrup
PSそして、もちろん、あるコンパイラーが他のコンパイラーより優れているという結論を下す価値はありません。 表に示されているそれぞれには、独自のキラー機能とアプリケーションがあります。 ただし、深刻なプロジェクトでは、コンパイラは「構文バン」の数だけで考慮されることはありません(誇張)。 合理的である!
UPD :調査の結果から判断すると(予想どおり)、ほとんどの人はSTL情報が必要であると考えています。 この質問を少し研究した結果、同様の比較を行うのに1〜2時間もかからないことがわかりました。 ですから、私の手が届くならそれをします。その場合は、タイトルを( "... and STL")に変更します。 ブックマークにトピックを持っている人は誰でも、情報が更新されたことを知っています。