2016-01-11 17 views
5

Dlaczego nie działa to:Jak zdobyć -std = C++ 11 w/libstdC++?

#include <regex> 
int main() { 
    return 0; 
} 

skompilowane jako:

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 

Gdybym pozwalają stdlib być libc++ następnie kompiluje. Regex to c++11, ale clang nie wydaje się mieć problemu zarówno z -std=c++11 -stdlib=libstdc++ per se. Na moim komputerze przynajmniej wygląda na to, że jest coś, co mógłbym użyć w /usr/include/regex.h, ale to nie jest standard, a poza tym są rzeczy inne niż regex, których chciałbym użyć (np. Std :: to_string).

Powodem tego ma pochodzić dlatego chciałbym odwołuje się do biblioteki 3rd party (dla których nie mam źródła), która jest przestrzegana jako std::string i nie std::__1::basic_string, ale mój kod wykorzystuje std::regex i std::to_string . Nie jestem pewien, czy chcę wprowadzić zależność od doładowania.

+2

Może twój libstC++ nie jest zgodny z C++ 11? –

+0

Jestem OSX 10.10.5, więc myślę, że Apple będzie na zadanie ... – amos

+0

[This] (http://stackoverflow.com/q/15853893/3425536) może pomóc. – emlai

Odpowiedz

5

Apple wysyła bardzo starą wersję libstdC++ z OS X (4.2.1 myślę). Ta wersja nie w pełni obsługiwała C++ 11, więc musisz pobrać nowszą wersję, aby użyć std::regex.

+0

Jeśli '-std = C++ 11 -stdlib = libstdC++' wzajemnie się wykluczają, IMHO, powinno być ostrzeżenie! – amos

+0

Nie wykluczają się one technicznie, nawet jeśli domyślnie jest to wersja dostarczona. libstdC++ 4.2.1 obsługuje niektóre funkcje C++ 11, które zostały zaproponowane w momencie wydania (połowa 2007 r.). –

+0

Przypuszczam, że to pytanie SO może służyć jako ostrzeżenie! :-) – amos

2

Wersja libstdC++ dostarczana z OS X pochodzi z gcc-4.2.1, ostatniej wersji GCC zanim FSF zdecydowało się na przyjęcie GPL3. Apple wycofało libstdC++ w OS X Lion na rzecz libC++ z LLVM Project. Jeśli chcesz używać C++ 11 na OS X, powinieneś używać -std=c++11 -stdlib=libc++

Powiązane problemy