【发布时间】:2020-12-08 06:54:50
【问题描述】:
考虑以下类模板:
template<typename T>
struct S
{
template<auto = T()>
void f();
};
使用模板参数T 实例化S 是否格式错误,而auto = T() 格式错误?
int main()
{
S<int> a; // ok
S<int&> b; // error
S<int()> c; // gcc ok, clang error
}
似乎是这样,但问题在于c,其中S 是用函数类型实例化的。 gcc 对此没问题,而 clang 说:
error: cannot create object of function type 'int ()'
这是有道理的。由于 gcc 确实使用int& 诊断实例化,我怀疑这是一个 gcc 错误。是这样吗,还是这个code 不需要诊断?
【问题讨论】:
标签: c++ templates language-lawyer