【问题标题】:Clang 3.1 and C++11 support statusClang 3.1 和 C++11 支持状态
【发布时间】:2012-05-23 00:18:07
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

默认情况下,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++ 的任何依赖项。

【讨论】:

  • 第二个不是为了 GCC 兼容性。 GCC 也有一个严格的C++11 模式。 gnu++11 用于启用可能是内部代码和 glibc 所需的一些 GNU 扩展(可能是 gnu90gnu99)。
  • 使用-std 命令行开关不会启用提问者询问的功能,因为clang 还不支持这些功能。
  • @BillWeinman 他们在最近的 3.1 版本中得到支持,并且已经在主干上出现了一段时间。
【解决方案2】:

http://clang.llvm.org/cxx_status.html 的页面充其量是令人困惑的。目前,发布的 3.1 版本不支持初始化列表或 lambdas(所以我暂时切换回 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 版本控制比我意识到的要复杂。

【讨论】:

  • 这些问题专门针对初始化列表和 lambda 表达式。 clang 2.9 不支持这些功能。
  • 初始化器列表和 lambdas 都被 clang 3.1 支持,并且已经被主干顶部支持了一段时间。此外,状态页面现在并且一直保持最新状态。
  • 我认为您可能将 Xcode 版本与 Clang 版本混淆了。 Clang 3.1(最新版本)具有几乎完整的 C++11 支持,包括 lambdas 和初始化列表。
  • c++ --versionApple clang version 3.1 (tags/Apple/clang-318.0.58) (based on LLVM 3.1svn) -- 那不是clang 3.1吗?
  • 不,不是。 Apple clang 版本与 Clang 版本不同。 LLVM 3.1svn 表示这是 3.0 和 3.1 版本之间某个时间的 SVN 快照。我不确定那是多少岁,但它似乎至少从 2 月就已经存在了。
猜你喜欢
  • 2011-12-20
  • 2012-11-01
  • 2015-03-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多