声明中带有函数模板参数的 sizeof 与定义不匹配

问题描述

下面的程序

template<int> 
struct R{};

struct S
{
    template<typename T>
    auto f(T t) -> R<sizeof(t)>;
};

template<typename T>
auto S::f(T t) -> R<sizeof(t)> {}

使用 Clang 编译,但 GCC 10.2 给出了 f 定义错误

错误:没有声明匹配 'R S::f(T)'

这看起来像是一个 GCC 错误,特别是因为 GCC 主干目前提供了一个 ICE

内部编译器错误:相同类型'R'和'R'的规范类型不同

此外,当声明和定义中的返回类型都更改为 R<sizeof (T)> 时,GCC 会编译程序。

该计划是否有效?

这是 demo

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)