C++ 1Z 错误:错误:演绎指南中声明中的显式限定
c++ 1z error: error: explicit qualification in declaration in deduction guide
我正在使用 gcc 8.0.0 尝试一个关于 1z 的演绎指南的示例201706(无法使用 clang 5.0.5 编译代码(。
namespace std
{
template<class R, class CLS, class ... ARGS> std::function(R(CLS::*)(ARGS ...)) -> function< R(CLS &, ARGS...)>;
}
编译器抱怨
error: explicit qualification in declaration of 'std::function(R (CLS::*)(ARGS ...))-> std::function<R(CLS&, ARGS ...)>'
-> function< R(CLS &, ARGS...)>;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
根据声明C++明确的限定,应删除限定"std::"以使声明正确。
但是当我将演绎指南声明更改为(请注意,在"->"之后添加了限定"std::"(。没有编译器错误:
template<class R, class CLS, class ... ARGS> function(R(CLS::*)(ARGS ...))-> std::function< R(CLS &, ARGS...)>;
我假设整个表达是一个声明,但似乎"->"之后的部分不是。
在我看来,限定词可以用于表达的一部分,但不能用于其他部分,这有点令人困惑。有谁能解释为什么最后一个表达式有效的原因?
谢谢
在你的例子中,演绎指南的语法不允许对任何一个function
进行限定。语法为:
deduction-guide:
explicit(opt) template-name (parameter-declaration-clause) -> simple-template-id;
模板名称必须是标识符(因此它不能是限定名称(,简单模板 ID 引用模板名称及其模板参数。
编译器可能仍允许冗余限定为符合要求的扩展,前提是它发出诊断(即警告(。如果没有至少警告,那就是编译器错误,尽管我会等到 C++17 最终确定后再提交错误报告。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- C++ 1Z 错误:错误:演绎指南中声明中的显式限定
- c++1z动态异常规范错误
- C++1z-如果在模板展开过程中出现条件,则引发编译错误