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
时间:原作者:0个回答

88 5

有點晚了但我想總結一下。

這是:

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

是演繹指南的例子。這裡是 ,你可以找到這個語言特性的良好解釋。

新版本的libstdc++在使用-std=c++17或者c++1z標誌時在它的實現中使用它。不幸的是,Clang還不支持這個特性。Clang C++1z狀態頁面報告它只在SVN上可用。

你可以在這裡找到用於 Arch Linux 的Bug 報告

原作者:
...