左辺値が右辺値参照にどのようにバインドされるかを理解しようとしています。次のコードを検討してください。
#include <iostream>
template<typename T>
void f(T&& x) {
std::cout << x;
}
void g(int&& x) {
std::cout << x;
}
int main() {
int x = 4;
f(x);
g(x);
return 0;
}
f() の呼び出しは問題ありませんが、g() の呼び出しはコンパイル時エラーを引き起こします。この種のバインディングはテンプレートに対してのみ機能しますか? なんで?テンプレートなしでどうにかしてそれを行うことはできますか?