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