Vin*_*ent 12 c++ templates variadic-templates c++11 template-argument-deduction
以下是标准的完美定义吗?
#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;
}
Run Code Online (Sandbox Code Playgroud)
它汇编得很好,g++ 4.8但我想知道它是否正常.
来自ISO C++ 标准的当前工作草案14.1 (11):
函数模板的模板参数包后面不应跟有另一个模板参数,除非该模板参数可以从函数模板的参数类型列表中推导出来或者具有默认参数
在您的情况下,“类型”是一个函数参数包,而“值”是一个模板参数包,后面总是可以跟一个函数参数包。此代码也出于同样的原因起作用:
#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;
}
Run Code Online (Sandbox Code Playgroud)