铿锵4建立在错误与c + + 1z
问题描述:
我刚刚更新我的拱linux系统到最新,其中包括gcc 7.1.1。试图建立这样的:使用命令铿锵4建立在<functional>错误与c + + 1z
clang++ main.cpp -std=c++1z
导致错误
#include <functional>
int main(int argc, char** argv) {
return 1;
}
:
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的,或铛?
更新:(忘了补充版本)
- GCC软件包版本7.1.1-2(提供的/ usr /包括/ C++ DIR)
- 铛软件包版本4.0.0-3
答
有点晚了,但我想总结一下。
此:
template <typename _Tp> optional(_Tp) -> optional<_Tp>;
是扣除导游的例子。 Here你可以找到这个语言功能的很好的解释。
当-std = C++ 17或C++ 1z标志正在使用时,新版本的libstdC++在其实现中使用它。 不幸的是,Clang目前还不支持此功能。 Clang C++1z status page报告它仅在SVN上可用。
你可以找到Arch Linux的错误报告here。
看起来像铛只是不支持演绎指南呢。 – Barry
啊,我没有意识到这是发生了什么(并忘记作为c + + 17的功能)。谢谢! – ryan0270
此处同样的错误。你有没有找到任何解决方法?我发现的唯一一个是切换到g ++ .. –