[英]Why must the template parameter pack be last?
我在gcc10.2
和clang11
之间面临以下不一致:
template<typename ... Args, typename T>
static constexpr int fuu = sizeof(T);
clang
抱怨模板包必须是模板声明中的最后一件事:
error: template parameter pack must be the last template parameter
template<typename ... Args, typename T>
但是gcc
很酷。
见https://godbolt.org/z/v9KeW6
这“最后一件事”实际上是规则吗? 在一个函数中,这适用于两个编译器。
template<typename... Args, typename T>
int foo(T) {
return sizeof(T);
}
我看不出第一个片段不应该工作的原因,模板参数是明确可推论的。
变量模板声明格式错误,这是一个 gcc 错误,无法诊断它。
... 如果主类模板、主变量模板或别名模板的模板参数是模板参数包,则它应是最后一个模板参数。 ...
函数模板很好,因为函数模板的规则不同。 如果参数包后面的模板参数可以通过调用点提供的参数推导出来,那么模板就ok了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.