I have the following template class declaration:

template<class T> class MapObjectList {

hash_map<String, T*, MapObjectListHash<T*>, Equaller<T*> > map;

...

}

I know that the third and fourth parameters refer to the hash function, and the equaller function respectively. They are defined as such, in a separate .h file:


////////////////////HASH FUNCTION

template<class T> class MapObjectListHash {

public:
unsigned operator () (const T* mapObj) const;

};

template <class T>
unsigned MapObjectListHash<T>:perator ()(const T* mapObj) const {
....
}


////////EQUALLER

template<class T> class Equaller {

public:
bool operator()(const T* a, const T* b) const;

};

template<class T>
bool Equaller<T>:perator () (const T* a, const T* b) const {
....
}

This setup results in roughly 81 distinct and abstruse errors, the first of which being, c:\program files\microsoft visual studio 8\vc\include\hash_map(32) : error C2903: 'rebind' : symbol is neither a class template nor a function template.

This results in a fruitless search, as I have no idea what's going on behind the scenes, let alone the line indicated.

I guess my question is, is it possible to use templated classes as predicates in this manner? If so, what would be the proper way to declare them? I've worked with hash_maps before, but never in conjunction with templated classes. Thanks.