如何解决具有格式错误的默认模板参数的未使用成员模板是否需要诊断?
请考虑以下类模板:
template<typename T>
struct S
{
template<auto = T()>
void f();
};
使用模板参数S
实例化T
的模板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不需要诊断吗?
解决方法
这是CWG1635:
1635。模板默认参数与函数默认参数有何相似之处?
仅在需要时才实例化默认函数参数。默认模板参数是否相同?例如,以下格式是否正确?
#include <type_traits> template<class T> struct X { template<class U = typename T::type> static void foo(int){} static void foo(...){} }; int main(){ X<std::enable_if<false>>::foo(0); }
此外,对查找的影响是否相同?例如,
struct S { template<typename T = U> void f(); struct U {}; };
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。