为什么在函数模板的正向引用上没有选择重载



代码段:

#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>&

相关内容

  • 没有找到相关文章

最新更新