从clang的C ++ 11支持状态网站http://clang.llvm.org/cxx_status.html,它说,从版本3.1开始支持“初始化列表”和“Lambda表达式”。
但是,使用LLVM / Clang trunk(3.2),针对初始化列表和lambda表达式进行编译将产生错误消息。
有人知道Clang> 3.1是否支持这些功能吗?
答案 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版本化比我意识到的更复杂。