完整模板指南第二版(第16章)中的书。提到了两个匹配函数模板的部分排序的一条特殊规则是不允许来自参数包的自变量与非可变参数模板函数匹配。令我感到惊讶的是,因为我总是写类似于下面的示例的代码,该示例在最终扩展中与非可变参数模板函数相匹配。
#include <iostream>
template <typename T>
void f(T && t)
{
std::cout << "HelloWorld!" << std::endl;
}
template <typename Head, typename ... Tail>
void f(Head && head, Tail && ... tail)
{
std::cout << head << std::endl;
f(std::forward<Tail>(tail)...);
}
int main()
{
f(1,2,3);
}
输出
1
2
HelloWorld!