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

Gab*_*iel 4 c++ templates template-argument-deduction c++17

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

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

void call_with_reference(int& r) {
    foo(r)
}
Run Code Online (Sandbox Code Playgroud)

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

这显然是错误的。标准中哪里有规定删除来自的引用A?一个不令人困惑、明确的明确答案将不胜感激。

相关部分: 在此输入图像描述

Oli*_*liv 5

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

\n\n
\n

如果表达式最初的类型为 \xe2\x80\x9c,对 T\xe2\x80\x9d ([dcl.ref], [dcl.init.ref]) 的引用,则类型将调整为 T。

\n
\n\n

所以这里Aint

\n\n

该表达式是一个lvalue但不会发挥任何作用,因为它P不是引用。

\n