首页 > 解决方案 > 引用作为参数的模板参数推导

问题描述

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

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

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

-> 匹配P并且A 给出:T被推论为int&

这显然是错误的。标准中提到的引用A被删除的规则在哪里?非常感谢一个不混淆,明确的答案。

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

标签: c++templatesc++17template-argument-deduction

解决方案


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

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

所以这里Aint

这个表达式是 anlvalue但不会发挥任何作用,因为P它不是参考。


推荐阅读