在使用initializer_list
和-stdlib=libstdc++
-std=c++11
参数的空函数的简单Hello文件时出现问题
如果我只使用-std=c++11
(这意味着使用libc ++进行编译)
然后文件编译并打印Hello!
如果我发表评论function_test
并同时使用-std=c++11
和-stdlib=libstdc++
然后文件编译并打印Hello!
如果我保留功能function_test
,我同时使用-std=c++11
和-stdlib=libstdc++
然后我收到以下错误:
$ g++ -stdlib=libstdc++ -std=c++11 -o test test.cpp
test.cpp:1:10: fatal error: 'initializer_list' file not found
#include <initializer_list>
^
1 error generated.
这是我的档案
#include <initializer_list>
#include <iostream>
using namespace std;
void function_test(initializer_list<int> something){}
int main(int argc, char * argv[])
{
cout << "Hello!" << endl;
function_test({0});
return 0;
}
这是我的苹果铿锵版
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr
--with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.3.0
Thread model: posix
答案 0 :(得分:6)
--with-gxx-include-dir=/usr/include/c++/4.2.1
^^^^^^^
注意“4.2”。对于C ++ 11,你的libstdc ++是方式。将其升级到某些5.x版本以获得完整的C ++ 11支持。
答案 1 :(得分:1)
我发现使用apple-llvm(clang)无法升级到更新版本的libstdc ++。因此,使用C ++ 11和libstdc ++的某些功能是不可能的。原因是这个:
主线libstdc ++已切换到GPL3,这是一个许可证 libc ++的开发人员无法使用。 libstdc ++ 4.2(最后一个GPL2版本) 可以独立扩展以支持C ++ 11,但这将是一个 代码库的分支(对于项目而言,这通常被视为更糟糕 开始一个新的独立的)。 libstdc ++的另一个问题是 它与G ++开发紧密集成,趋于束缚 与G ++的匹配版本非常接近。
源: http://libcxx.llvm.org/docs/
感谢所有帮助我找到答案的答案/评论。