use boost/function/hash for easy msvc compatibility even though msvc 2010 would support using std::hash in <functional>