Can't return a temporary from lvalue subroutine