引用模板作为参数的模板参数推导

时间:2019-06-11 16:42:12

标签: c++ templates c++17 argument-deduction

我正在尝试深刻理解模板参数推导。 我不明白的一点是,我应该如何应用标准中的规则 here用于类型AP 对于以下情况(可悲的是cppreference.com上没有任何示例,请参阅下面的相关部分)

template<typename T>
void foo(T t);

void call_with_reference(int& r) {
    foo(r)
}

->匹配PA,得出:T推导为int&

这显然是错误的。该标准中删除{em {1}}的引用的规则在哪里?一个无混淆,明确的明确答案将不胜感激。

相关部分: enter image description here

1 个答案:

答案 0 :(得分:4)

A是表达式的类型。表达式类型由[expr.type]/1描述:

  

如果表达式最初的类型为“对T的引用”([dcl.ref],[dcl.init.ref]),则将该类型调整为T。

所以这里Aint

该表达式是lvalue,但由于P不是引用,因此不会发挥任何作用。