clang 4使用c ++ 1z在<functional>上构建错误

rya*_*270 9 c++ archlinux clang++ c++17

我刚刚将我的arch linux系统更新到包含gcc 7.1.1的最新版本.试图建立这个:

#include <functional>

int main(int argc, char** argv) {
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

使用命令

clang++ main.cpp -std=c++1z
Run Code Online (Sandbox Code Playgroud)

导致错误:

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>;
Run Code Online (Sandbox Code Playgroud)

这对我来说是个错误吗,是linux,还是clang?

更新:(忘了添加版本)

  • gcc包版本7.1.1-2(提供/ usr/include/c ++目录)
  • clang包版本4.0.0-3

小智 7

不太晚,但我想总结一下.

这个:

template <typename _Tp> optional(_Tp) -> optional<_Tp>;
Run Code Online (Sandbox Code Playgroud)

是扣除指南的例子.在这里,您可以找到这种语言功能的很好的解释.

当-std = c ++ 17或c ++ 1z标志正在使用时,新版本的libstdc ++在其实现中使用它.不幸的是,Clang还不支持此功能.Clang C++ 1z状态页面仅在SVN 报告.

您可以在此处找到Arch Linux的错误报告.