2

私が知っているように、右辺値参照は左辺値にバインドできません。例えば、

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);
}

コンパイラはエラーを報告しません。なんで?

4

1 に答える 1