12
是下列完美标准所定义的?混合可变参数模板值和可变参数推导类型
#include <iostream>
template <unsigned int... Values, class... Types>
void f(Types&&... values)
{
std::cout<<sizeof...(Values)<<" "<<sizeof...(Types)<<std::endl;
}
int main()
{
f<7, 5>(3);
return 0;
}
它很好地编译在g++ 4.8
但我不知道是否是正常的。
嗯,我不擅长围绕标准段落,但为什么你不会指望工作?积分是有效的模板参数值,并且参数的类型推导在很长时间内也存在。 – Vinzenz
当你的'Types'从你的函数参数推断,你的'Values'明确规定,既然'5'是最绝对*不* A *类型*,我也很难看到如何,这并不完全按照您指定的(和预期)进行编译。你会期望什么可能是不符合标准的问题? – WhozCraig
[temp.param]/11“的功能模板的模板参数包不应被随后的另一个模板参数 除非该模板参数可以从参数*类型列表来推断*函数模板的 或具有默认参数“所以我会说这是合法的,除非'Types'只出现在非推导的上下文中。 – dyp