为什么这不起作用:
#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
如果我允许stdlib
成为libc++
,那么它就会编译。正则表达式为c++11
,但clang
本身似乎没有问题-std=c++11 -stdlib=libstdc++
。至少在我的机器上,看起来我可以在/usr/include/regex.h
中使用,但这不是标准的,除了我想使用的正则表达式以外的东西(例如std :: to_string)。
之所以出现这种情况,是因为我想链接到第三方库(我没有源代码),该库被编译为std::string
而不是std::__1::basic_string
,但我的代码使用std::regex
和std::to_string
。我不确定是否要引入对boost的依赖。
答案 0 :(得分:5)
Apple发布了一个非常旧版本的libstdc ++和OS X(我认为是4.2.1)。该版本并不完全支持C ++ 11,因此您需要使用较新版本才能使用std::regex
。
答案 1 :(得分:2)
OS X附带的libstdc ++版本来自gcc-4.2.1,这是在FSF决定采用GPL3之前GCC的最后一个版本。 Apple在OS X Lion中弃用了libstdc ++,转而使用LLVM Project中的libc ++。如果要在OS X上使用C ++ 11,则应使用-std=c++11 -stdlib=libc++