Clang 3.1和C ++ 11支持状态

时间:2012-05-15 13:17:07

标签: c++ c++11 llvm clang

从clang的C ++ 11支持状态网站http://clang.llvm.org/cxx_status.html,它说,从版本3.1开始支持“初始化列表”和“Lambda表达式”。

但是,使用LLVM / Clang trunk(3.2),针对初始化列表和lambda表达式进行编译将产生错误消息。

有人知道Clang> 3.1是否支持这些功能吗?

2 个答案:

答案 0 :(得分:31)

默认情况下,clang++无法启用C ++ 11功能 - 您有to pass an additional flag during compilation

clang++ -std=c++11 [input files...]

或者

# enables some additional C++11 extensions GCC has
clang++ -std=gnu++11 [input files...] 

此外,您可以在使用libstdc++和Clang自己的libc++之间切换,这是C ++标准库的不同实现。在某些情况下,libc++可能比现有的libstdc++库更好地实现C ++ 11标准。

# uses clang's C++ library in C++98 mode
clang++ -stdlib=libc++ [input] # uses clang's C++ library

# uses clang's C++ library and enables C++11 mode
clang++ -stdlib=libc++ -std=c++11 [input] 

如果您在具有过时版本的libstdc++(如Mac OSX)的环境中使用Clang,则后者非常重要,但请注意,这两个C ++库彼此不兼容,因此您可能会如果您要使用它,则重建针对libc++的任何依赖项。

答案 1 :(得分:0)

http://clang.llvm.org/cxx_status.html的页面充其量令人困惑。目前,发布的3.1版本不支持初始化列表或lambda(因此我暂时切换回GCC 4.8)。

根据此处的说明,您始终可以使用__has__feature宏检查功能的clang支持:

http://clang.llvm.org/docs/LanguageExtensions.html#checking_language_features

例如,如果这些功能可用且已启用,__has_feature(cxx_generalized_initializers)__has_feature(cxx_lambdas)将返回true。

就个人而言,我期望这些功能可以通过clang 4.0来准备,预计将在下一个Xcode(可能是2012年6月)发布。

- 编辑以澄清我一直在测试的版本 - 显然,clang版本化比我意识到的更复杂。