Here I think a simple non-const lvalue is ok since hash() is used with rvalues only, so no copy should be triggered. Instead the compiler should trigger the move constructor and move the temporary instead of copying it.