c++ - 与模板括号相关的奇怪编译错误解释为运算符“>”
问题描述
我在 Linux 上使用英特尔编译器时遇到了一个奇怪的编译错误。
所以我用 Compiler Explorer 做了一些测试。
这段代码在几个编译器上编译得很好:
enum class Enum {a, b};
template <int>
struct Base {
template <Enum a, Enum b> void F(int) {}
};
template <int i>
struct Derived : Base<i> {
void G() {
Base<i>::F<Enum::a, Enum::b>(1);
}
};
int main() {
Derived<1> D;
}
但是使用 x86-64 gcc 8.1,我得到:
<source>: In member function 'void Derived<i>::G()':
<source>:12:36: error: no match for 'operator>' (operand types are 'Enum' and 'int')
Base<i>::F<Enum::a, Enum::b>(1);
~~~~~~~^~~~
这是一个与我使用 intel 编译器得到的非常相似的错误。不过,此示例在具有 icc 17 的编译器资源管理器上编译得很好。
在这两种情况下,如果我删除第二个模板参数,这编译得很好。
这里发生了什么?我可以使用什么解决方法?
解决方案
推荐阅读
- html - 想要为表格中的不同动态 id 添加不同的颜色
- php - Laravel 7验证电子邮件地址无效签名
- javascript - 您如何正确克隆 Javascript/JQuery 中的内容?
- python - Python 中的 Visual Studio 错误代码折叠
- druid - Apache Druid Schema 列添加
- java - 我需要帮助修复这段代码的一部分,我试图在多线程 java 中的另一条消息之后发出一条消息,但它不起作用,我该怎么办?
- c# - '4.6.0-preview6.19303.8' 不是有效的版本字符串。无法在 Visual Studio 2013 中安装 Nuget 包
- regex - Regex - Allow dash character in body text but not at start or end
- python - Python问题无法运行模块和输出问题
- laravel - 来自控制器的 Laravel 重定向给出“此路由不支持方法”错误