first and second function objects use poly_function to get return types correct
revert previous hasty change