web-dev-qa-db-ja.com

Gnu C ++はC ++ 11を明示的に要求せずにいつサポートしますか?

現在、g ++-4.8.1では、次の方法でファイルをC++ 11モードでコンパイルする必要があります。

_g++ -std=c++11 -o prog.x prog.cpp
_

言えるだけの計画はありますか

_g++ -o prog.x prog.cpp
_

_prog.cpp_をコンパイルするには?

多分_prog.cpp_は

  • _#include <regex>_
  • _thread_local_
  • _class Widget { int member = 5; }_
  • MyType operator"" myt(const char*, sze_t);
  • 等々。
46
towi

GCC 6.0: https://gcc.gnu.org/gcc-6/changes.html

C++のデフォルトモードは-std=gnu++14 の代わりに -std=gnu++98

29
nobar

私が得ることができる答えに最も近いと思うのは、info gccコマンド:

改訂されたISO C++標準は、2011年にISO/IEC 14882:2011として公開され、C++ 11と呼ばれています。公開前は、一般にC++ 0xと呼ばれていました。 C++ 11には、C++言語に対するいくつかの変更が含まれています。そのほとんどは、GCCの実験的なC++ 11モードで実装されています。実験的なC++ 11モードで使用可能なC++ 11機能に関する情報については、 http://gcc.gnu.org/projects/cxx0x.html を参照してください。 GCCでこの標準を選択するには、オプション '-std = c ++ 11'を使用します。標準で必要なすべての診断を取得するには、「-pedantic」(または警告ではなくエラーにする場合は「-pedantic-errors」)も指定する必要があります。

http://gcc.gnu.org/projects/cxx0x.html ページには次のように記載されています:

重要:C++ 11に対するGCCのサポートはまだ実験的です。いくつかの機能は初期の提案に基づいて実装されており、最終的なC++ 11標準に一致するように更新されたときに下位互換性を維持する試みは行われません。

libstdc ++ ページも、不完全であることを示しています。 (regexはまだ実装されていないと思います。)

Steve Jessopの答え は基本的に最後の段落で同じことを言っていますが、彼の答えの最初の部分を引用します:

C++ 11は数年前から標準でしたが、コンパイラは次の状態になるまでデフォルトモードをC++ 11に切り替えません。

  • 絶対に、C++ 11のサポートは、そのコンパイラとそれが使用するライブラリで完全です。また、コンパイラの作成者が信頼性にまったく懸念を抱いている場合も安定しています。
  • C++ 11にはC++ 03との完全な下位互換性がないため、コンパイラのメジャーバージョン番号を増やしてください。
  • 理想的には、ユーザーが変更に備えることができるように、よく知られたスケジュールに従ってください。
20
user1508519

UPDATE:元の回答は過去28か月で古くなっています。 nobar's answer によれば、GCC 6.1は、デフォルトでGNU拡張機能を備えたC++ 14をサポートしています。GCC6.1は2016年4月27日にリリースされました。新しい標準が急速に採用されたことを嬉しく思います!

元の答えの残りについては、特定のフラグを「デフォルト」にする方法に答える部分を維持することに価値があります。だから私はそれを下に置いた。


私がただ言うことができるとき、計画があります[...]

Makefileでデフォルトのフラグを定義することができ、そうすればmakeだけです。

gccでC++ 11を有効にするにはどうすればよいですか? の受け入れられた答えで、開始できます(または makefileチュートリアル )。

ここStackoverflowで頻繁にポップアップするように思われる別のアドバイスは、bashエイリアスalias g++="g++ --std=c++0x"、「 here how」を参照してください。ただし、個人的にはこれを行いません。不快な驚きにつながる可能性があります。 C++ 11には重大な変更が加えられています。独自のメイクファイルを作成し、単にmakeと入力します。


13
Ali