Uses result_error_handler instead of std::function