2016-01-11 4 views
5

なぜこの作業を行います。入手方法-std = C++ 11 w/libstdC++?

としてコンパイル
#include <regex> 
int main() { 
    return 0; 
} 

clang++ -std=c++11 -stdlib=libstdc++ temp.cpp 
temp.cpp:1:10: fatal error: 'regex' file not found 
#include <regex> 
     ^
1 error generated. 


clang++ --version 
Apple LLVM version 7.0.0 (clang-700.1.76) 
Target: x86_64-apple-darwin14.5.0 
Thread model: posix 

私はstdliblibc++ことを可能にする場合、それがコンパイルされます。正規表現はc++11ですが、clangはそれ自体が-std=c++11 -stdlib=libstdc++と問題はありません。少なくとも私のマシンでは、/usr/include/regex.hで使用できるものがあるようですが、これは標準ではありません。正規表現以外のものもあります(例:std :: to_string)。

私はstd::stringなくstd::__1::basic_stringとして遵守されて(私はソースを持っていない)サードパーティのライブラリにリンクしたいと思いますので、これは来ている理由は、私のコードはstd::regexstd::to_stringを使用しています。私はブーストへの依存を導入したいとは思っていません。

+2

libstC++はC++ 11に準拠していない可能性がありますか? –

+0

私はOSX 10.10.5なので、Appleは仕事に取り組んでいると思います。 – amos

+0

[This(http://stackoverflow.com/q/15853893/3425536) – emlai

答えて

5

AppleはOS X(4.2.1と思う)の非常に古いバージョンのlibstdC++を同梱しています。そのバージョンはC++ 11を完全にサポートしていなかったので、std::regexを使用するには新しいバージョンを入手する必要があります。

+0

'-std = C++ 11 -stdlib = libstdC++'が相互に排他的なIMHOの場合、警告が表示されます! – amos

+0

これらは、デフォルトで出荷されるバージョンであっても、技術的には相互排他的ではありません。 libstdC++ 4.2.1は、リリース時点で提案されていたC++ 11の機能(2007年半ば)をサポートしています。 –

+0

私はこのSOの質問が警告として役立つことができると思います! :-) – amos

2

OS Xに同梱されているlibstdC++のバージョンは、FSCCがGPL3を採用する前に、GCCの最新バージョンであるgcc-4.2.1から提供されています。 AppleはOS X LionのlibstdC++を廃止し、LLVMプロジェクトのlibC++を支持しました。 OS XでC++ 11を使用する場合は、-std=c++11 -stdlib=libc++

関連する問題