Я очень удивлен, обнаружив, что следующие компилируются:
#include <iostream>
using namespace std;
template<typename T>
class SomeCls {
public:
void UseT(T t) {
cout << "UseT" << endl;
}
};
template<>
class SomeCls<int> {
// No UseT? WTF?!??!?!
};
int main(int argc, char * argv[]) {
SomeCls<double> d;
SomeCls<int> i;
d.UseT(3.14);
// Uncommenting the next line makes this program uncompilable.
// i.UseT(100);
return 0;
}
Почему это разрешено? Просто кажется неправильным, что класс SomeCls
не должен иметь метод void UseT (T t)
. Я уверен, что мне не хватает здесь специализации (я не эксперт по C ++). Кто-нибудь, пожалуйста, просветите меня?