据我所知,右值引用不能绑定到左值。例如,
void func(Foo &&f) {}
int main() {
Foo f;
func(f);
}
编译器抱怨:错误:无法将 'Foo&&' 类型的右值引用绑定到 'Foo 类型的左值
但是,为什么右值引用类型的模板参数可以绑定到左值?例如,
template <typename T> void funcTemp(T &&arg) {}
int main() {
Foo f;
funcTemp(f);
}
编译器不会抱怨错误。为什么?