Если вы хотите специализировать функцию-член для шаблонного класса, вам нужно специализировать весь класс.Вот минимальный пример, чтобы дать вам идею.
#include <iostream>
#include <cstring>
template <typename T>
class Pair {
public:
Pair(T val) : value(val) {}
bool operator==(const Pair& other) {
return value == other.value;
}
private:
T value;
};
template <>
class Pair<char*> {
public:
Pair(const char* val) {
std::size_t size = std::strlen(val) + 1;
value = new char[size];
memcpy(value, val, size);
}
~Pair() {
delete value;
}
bool operator==(const Pair& other) {
return std::strcmp(value, other.value) == 0;
}
private:
char* value;
};
int main() {
Pair<int> p1(5), p2(5), p3(4);
Pair<char*> p4("Hey"), p5("Hey"), p6("Bye");
std::cout << (p1 == p2) << '\n' << (p1 == p3) << '\n';
std::cout << (p4 == p5) << '\n' << (p4 == p6) << '\n';
}