2011-11-02 104 views
4

我有一些由我编写的用于MS VC++ 10的代码。我使用C++ 11,特别是,这样的表达式C++的LLVM和Clang支持11

std::function<int (int)> f =...; 
auto it = v.begin(); 
for_each(it1, it2,[&](int& i) { ++i;}); 

现在,我尝试了MacOS和XCode中与LLVM &铛和我的代码不能编译!问题是为什么?也许,我将指定一个使用C++ 11的选项。在这种情况下,我可以在哪里修复它在Xcode?

回答

14

您将需要Xcode 4.2。

在您的构建设置中,搜索“C++ 0x”并将“C++语言方言”设置为C++ 0x [-std = C++ 0x]“。然后搜索“libC++”并将“C++标准库”设置为“libC++”。

并非所有的C++ 11工具都可用。例如lambda尚未支持。

+0

为什么倒票,我想知道? –

+2

许多C++ 11功能也支持Xcode 4.1 clang,但你必须把选项放在'其他标志'字段中。此外,Xcode版本的clang不允许在OS X pre-Lion上使用libC++,因此即使安装了libC++,也无法使用它。详细信息:http://stackoverflow.com/questions/7226753/osx-lion-xcode-4-1-how-do-i-setup-a-c0x-project/7236451#7236451 – bames53

+3

@ bames53:如果你想使用雪豹上的libC++,我可以帮助你。转到此处(http://libcxx.llvm.org/)并按照10.6的指示进行操作。您需要一个帮助程序库,我在我的个人网站上托管。如果您需要帮助,可以直接与我联系。 Xcode 4.1不支持libC++,但只支持gcc 4.2。 gcc 4.2不提供C++ 11的库支持(虽然有一些tr1支持)。 –

5

有关Clang当前支持的C++ 11功能列表,请参阅this nice list。 Lambda表达式(和语法上相关的initialzer列表)目前尚未实现。

您现在唯一的选择(直到Clang开发人员实现lambda支持)使用MacPorts的GCC 4.5/4.6编译器。

额外的命令行选项将是-std=c++0x(在下一个版本的Clang和GCC中它将是正确的-std=c++11)。

+0

请注意,相关列表仅用于回购中支持的内容。你从XCode获得的东西几乎肯定是早期版本。 –

+0

Nicol:真的够了,但它很容易(而且快)足以自己构建Clang ;-) – rubenvb