标准是否完美定义了以下内容?
#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
但是我不知道这是否正常。
根据ISO C ++标准的当前工作草案14.1(11):
除非可以从功能模板的parameter-type-list推导该模板参数或具有默认参数,否则功能模板的模板参数包后不得再跟随另一个模板>参数。
在您的情况下,'Types'是功能参数包,而'Values'即模板参数包,可以始终跟在功能参数包后面。同样,此代码也基于相同的原因起作用:
#include <iostream>
template <class... Values, class... Types>
void f(Types&&... values)
{
std::cout<<sizeof...(Values)<<" "<<sizeof...(Types)<<std::endl;
}
int main()
{
f<int, float>(-3, 5);
return 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句