(I asked a variation of this question on comp.std.c++ but didn\'t get an answer.)
Why does the call to f(arg) in this code call the const ref overload of
f(arg)
Take a look at this:
http://blogs.msdn.com/vcblog/archive/2009/02/03/rvalue-references-c-0x-features-in-vc10-part-2.aspx
rvalue references: overload resolution
It looks like your case is: "Lvalues strongly prefer binding to lvalue references".