繁体   English   中英

为什么模板参数包必须放在最后?

[英]Why must the template parameter pack be last?

我在gcc10.2clang11之间面临以下不一致:

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 错误,无法诊断它。

temp.param#14

... 如果主类模板、主变量模板或别名模板的模板参数是模板参数包,则它应是最后一个模板参数。 ...

函数模板很好,因为函数模板的规则不同。 如果参数包后面的模板参数可以通过调用点提供的参数推导出来,那么模板就ok了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM