关于函数模板参数推导

时间:2016-10-04 15:06:49

标签: c++ language-lawyer

以下是14.8.2.1第3段的例子:

template <class T> int f(T&& heisenreference);
template <class T> int g(const T&&);
int i;
int n1 = f(i); // #1
int n2 = f(0);
int n3 = g(i);

对于#1,最终函数模板参数类型为T,因为相同的段落建议

  

......如果P是a   引用类型,P引用的类型用于类型推导...

与此同时,最终参数将为lvalue reference to int,因为同样的段落建议

  

...如果P是转发参考且参数是左值,   类型“左值引用A”用于代替A进行类型扣除。

总之,Tlvalue reference to int相同。但是,一旦lvalue reference to int适合T的位置,该类型就不再合理了,因为T&& heisenreference将是rvalue reference to lvalue reference to int heisenreference。事实上,我已经知道正确的答案是lvalue reference to int,但我不知道如何严格按照标准得出这个结论。

0 个答案:

没有答案