私が知っているように、右辺値参照は左辺値にバインドできません。例えば、
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);
}
コンパイラはエラーを報告しません。なんで?