be more consistent about casting rvalues