我正在努力深入理解模板参数推导。
我不明白的一点是,我应该如何应用标准中的规则
here对于类型 A
和 P
对于以下情况(遗憾的是 cppreference.com 上没有示例,请参阅下面的相关部分)
template<typename T>
void foo(T t);
void call_with_reference(int& r) {
foo(r)
}
P
不是 reference typ :
这给出P := T
A := int&
-> 匹配 P
和 A
给出: T
推导为 int&
这显然是错误的。标准中规定从A
中删除 的规则在哪里?非常感谢一个不混淆、明确的答案。
最佳答案
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.
所以这里的A
是int
。
此表达式是一个左值
,但由于P
不是引用,所以它不会发挥任何作用。
关于c++ - 引用作为参数的模板参数推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56548276/