これがOSXの状況です。
デフォルトで2つのC++コンパイラがインストールされています。
[5:49pm][wlynch@watermelon ~] g++ --version
i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
[5:49pm][wlynch@watermelon ~] clang++ --version
Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
g ++はllvm-gccを実行しています。これはgccフロントエンドであり、次にllvmバックエンドです。
clang ++はclangを実行しています。これは、clangフロントエンドであり、次にllvmバックエンドです。
他のパッケージをインストールせずにOSXでC++11コンパイラが必要な場合、唯一のオプションはclangコンパイラを使用することです。
必要なフラグは次のとおりです。
clang++ -stdlib=libc++ -std=gnu++11
私が渡す2つのフラグを説明するには:
-stdlib=libc++
gnulibstdc++の代わりにlibc++標準ライブラリを使用します。OS Xでは、libc++バージョンはc++11をサポートしています。gnulibstdc++のものはそうではありません。
-std=gnu++11
ラムダや列挙型クラスなどのc++11コード機能をサポートするようにコンパイラーに指示します。を渡すこともできます-std=c++11
。これは似ていますが、一般的に期待されるいくつかのgnu拡張機能を有効にしません。
OS X 10.9のアップデート:OS X Mavericksの時点で、g++とclang++の両方が実際にclangを使用しています。唯一の違いは、g ++が意味-stdlib=libstdc++
し、clang++が意味すること-stdlib=libc++
です。したがって、Mavericksでは、C ++ 11を使用する場合は、上記のアドバイスに従うか、次のようにすることができます。
clang++ -std=gnu++11
OS X 10.10のアップデート:OS X Yosemiteの時点では、g++はまだ変装しています。ただし、どちらもデフォルトでlibstdc++を使用しなくなりました。現在、両方ともlibc++上にあります。