I am trying to understand how lvalues bind to rvalue references. Consider this code:
#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; } While the call to f() is fine, the call to g() gives a compile-time error. Does this kind of binding work only for templates? Why? Can we somehow do it without templates?