Remove all the <T> after the IsEqual member functions - they are inside a templated class, they know they are templated already.
Also, you should only have ONE IsEqual function, unless you need to spcialize, but fix what I said first and remove all but one version of the function.
@ajh32 that is incorrect, functions in templated classes should be defined inline. It would work in this case, but if he wanted to use the class in any other source files he would have to copy the definition of the function. It is better to define member functions inline for templated classes.
In any case, it only makes sense to specialize for floating point types, as using the == operator would not be acceptible - the normal templated function works fine for std::string and so does not need a specialization.