声明中带有函数模板参数的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<sizeof (t)> S::f(T)'

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

内部编译器错误:相同类型的规范类型不同 'R<sizeof (t)>' 和 'R<sizeof (t)>'

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

程序是否有效?

这是演示。

以上是声明中带有函数模板参数的sizeof与定义不匹配的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>