included <functional> to fix build error