[英]Clang 3.1 and C++11 support status
来自clang的C ++ 11支持状态网站http://clang.llvm.org/cxx_status.html ,它说,从版本3.1开始支持“初始化列表”和“Lambda表达式”。
但是,使用LLVM / Clang trunk(3.2),针对初始化列表和lambda表达式进行编译将产生错误消息。
有谁知道Clang> 3.1是否支持这些功能?
默认情况下, clang++
不会启用C ++ 11功能 - 您必须在编译期间传递一个额外的标志 。
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++
任何依赖项。你是用那个。
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版本比我意识到的更复杂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.