using decltype to get return type to delayed function calls