代码段:
#include <iostream>
template<typename T>
struct Printer{};
template<typename T>
void test(T&&)
{
std::cout << "Primary template calledn";
}
template<typename T>
void test(Printer<T>&&)
{
std::cout << "Specialized template calledn";
}
int main()
{
auto t = Printer<int>{};
test(0);
test(t);
}
这是的演示
为什么要打印两次Primary template called
?
如果从第二个模板中删除前向引用,则选择Printer
重载。
为什么不选择&&
?
转发引用仅适用于T&&
,不适用于C<T>&&
或const T&&
。
test(0); // Call test(T&&) with T=int
test(t); // Call test(T&&) with T=Printer<int>&