std::result_of needs to know the input type