c++ - 在 <functional> 上使用 c++1z,C++ clang 4生成错误

  显示原文与译文双语对照的内容
73 1

我刚刚更新了 Arch Linux 系统到最新版本,包括 gcc 7.1.1. 尝试构建这里功能:


#include <functional>



int main(int argc, char** argv) {


 return 1;


}



使用命令


clang++ main.cpp -std=c++1z



结果出现错误:


In file included from main.cpp:1:


In file included from/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/functional:60:


In file included from/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/unordered_map:47:


In file included from/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/bits/hashtable.h:37:


In file included from/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/bits/node_handle.h:39:


/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/optional:1032:27: error: use of class template 'optional'


 requires template arguments


 template <typename _Tp> optional(_Tp) -> optional<_Tp>;


 ^


/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/optional:451:11: note: template is declared here


 class optional


 ^


/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/optional:1032:40: error: expected ';' at end of declaration


 template <typename _Tp> optional(_Tp) -> optional<_Tp>;


 ^


/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/optional:1032:41: error: cannot use arrow operator on a type


 template <typename _Tp> optional(_Tp) -> optional<_Tp>;



这是我的部分,Arch Linux 或者clang的错误?

更新:( 忘记添加版本)

  • gcc软件包版本 7.1.1 -2 ( 提供/usr/include/c++ 目录)
  • clang包版本 4.0.0 -3
时间: 原作者:

88 5

有点晚了但我想总结一下。

这是:


template <typename _Tp> optional(_Tp) -> optional<_Tp>;



是演绎指南的例子。 这里是 ,你可以找到这个语言特性的良好解释。

新版本的libstdc++在使用-std=c++17或者c++1z标志时在它的实现中使用它。 不幸的是,Clang还不支持这个特性。 Clang C++1z状态页面报告它只在SVN上可用。

你可以在这里找到用于 Arch Linux 的Bug 报告

...