【发布时间】:2017-05-30 12:25:45
【问题描述】:
我刚刚将我的 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
【问题讨论】:
-
看来clang还不支持推导指南。
-
啊,我没有意识到这就是这里发生的事情(并且忘记了这是 c++17 的一个特性)。谢谢!
-
这里有同样的错误。您是否找到任何解决方法?我发现的唯一一个是切换到 g++ ..
-
没有clang的解决方法。正如巴里所说;它只是尚未实施。就我而言,这只是一个 buildbot 问题,因为无论如何我的大部分工作都使用 g++,但 clang 测试构建仍然失败。
-
好的。那就等着吧……
标签: c++ archlinux clang++ c++17