繁体   English   中英

Clang 3.1和C ++ 11支持状态

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM