Apple Clang; 使用C++ 11和libstdc ++

Iss*_* T. 3 c++ llvm clang libstdc++ c++11

initializer_list在使用-stdlib=libstdc++和时编译一个带有空函数的简单Hello文件时,我遇到了一个问题-std=c++11

如果我只使用-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.
Run Code Online (Sandbox Code Playgroud)

这是我的档案

#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;
}
Run Code Online (Sandbox Code Playgroud)

这是我的苹果铿锵版

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
Run Code Online (Sandbox Code Playgroud)

Bau*_*gen 6

--with-gxx-include-dir=/usr/include/c++/4.2.1
                                       ^^^^^^^
Run Code Online (Sandbox Code Playgroud)

注意"4.2".你的libstdc ++的方式来为老C++ 11.将其升级到某些5.x版本以获得完整的C++ 11支持.

  • libstdc++ 仍然存在以实现向后兼容性。适用于使用旧版 Xcode 编译的应用程序。“新”libc++ 库中添加了 C++11 功能,旨在替代旧库。 (2认同)