这是对这个问题的跟进。
一篇 2002 年关于 C++ 中的函数转发问题的论文进行了以下观察:
这是 Boost.Bind 和 Boost.Lambda 目前采用的方法:
template<class A1, class A2, class A3> void f(A1 & a1, A2 & a2, A3 & a3) { return g(a1, a2, a3); }
它的主要缺陷是它不能转发非常量右值。参数推导创建一个非常量引用,并且该引用不能绑定到参数。这使得无辜的例子
int main() { f(1, 2, 3); }
失败(违反 C1)。
我看到呼叫失败,但解释是否正确?文字 1、2、3 不是 const 右值吗?