2016-01-11 6 views
5

Warum funktioniert diese Arbeit:Wie bekomme ich -std = C++ 11 mit libstdC++?

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

Zusammengestellt als:

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 

Wenn ich stdlib erlauben libc++ dann werden es kompiliert. Regex ist c++11, aber clang scheint kein Problem mit beiden -std=c++11 -stdlib=libstdc++ per se zu haben. Auf meinem Rechner sieht es zumindest so aus, als könnte ich etwas in /usr/include/regex.h verwenden, aber das ist kein Standard, und außerdem gibt es andere Dinge als Regex, die ich gerne benutzen würde (z.B. std :: to_string).

Der Grund dafür gekommen ist, weil ich auf eine 3rd-Party-Bibliothek verknüpfen möchte (für die ich die Quelle nicht haben), die als std::string und nicht std::__1::basic_string halten wird, aber mein Code verwendet std::regex und std::to_string . Ich bin mir nicht sicher, ob ich eine Abhängigkeit von Boost einführen möchte.

+2

verwenden Vielleicht ist Ihre libstC++ nicht C++ 11 kompatibel? –

+0

Ich bin OSX 10.10.5, also würde ich denken, Apple wäre auf Aufgabe ... – amos

+0

[This] (http://stackoverflow.com/q/15853893/3425536) könnte helfen. – emlai

Antwort

5

Apple liefert eine sehr alte Version von libstdC++ mit OS X (4.2.1 glaube ich). Diese Version unterstützt C++ 11 nicht vollständig. Sie müssen daher eine neuere Version verwenden, um std::regex zu verwenden.

+0

Wenn '-std = C++ 11 -stdlib = libstdC++' sich gegenseitig ausschließen, IMHO, sollte es eine Warnung geben! – amos

+0

Sie schließen sich technisch nicht aus, auch wenn die Version standardmäßig ausgeliefert wird. libstdC++ 4.2.1 unterstützt einige C++ 11-Funktionen, die zum Zeitpunkt der Veröffentlichung (Mitte 2007) vorgeschlagen wurden. –

+0

Ich nehme an, diese SO Frage kann als Warnung dienen! :-) – amos

2

Die Version von libstdC++, die mit OS X ausgeliefert wird, stammt von gcc-4.2.1, der letzten Version von GCC, bevor sich FSF für GPL3 entschied. Apple lehnte libstdC++ in OS X Lion zugunsten von libC++ aus dem LLVM-Projekt ab. Wenn Sie C++ 11 unter OS X verwenden möchten, sollten Sie -std=c++11 -stdlib=libc++

Verwandte Themen