c++ - 引用作为参数的模板参数推导

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

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

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

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

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

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

相关部分: enter image description here

最佳答案

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

If an expression initially has the type “reference to T” ([dcl.ref], [dcl.init.ref]), the type is adjusted to T.

所以这里的Aint

此表达式是一个左值,但由于P 不是引用,所以它不会发挥任何作用。

关于c++ - 引用作为参数的模板参数推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56548276/

相关文章:

c++ - Qt 5.5.1 找不到 libQt5XcbQpa.so.5

c++ - 局部变量的相对内存位置

c++ - 改变片段的颜色

html - Libcurl C++ - 如何发布此特定表单的表单数据?

C++11模板解析错误,使用模板别名进行类型推导

javascript - 如何更改包含模板上的 Meteor 模板事件的行为?

没有 typedef 的模板类的 C++ 模板,这可能吗?

c++ - constexpr 函数在编译时获取值,即使我的变量不是 constexpr

c++ - 在 C++ 中使用逗号运算符时的未定义行为

c++ - 使用 `using` 或其他方式显式实例化函数模板