Рассмотрим следующий код:
template<typename T>
struct MyTempl
{
virtual void doStuff(const T &value) = 0;
};
struct MyImpl : MyTempl<int>
{
void doStuff(const int &value) {}
};
struct MyPtrImpl : MyTempl<int*>
{
void doStuff(const int* &value) {}
};
MyImpl imp1;
MyPtrImpl imp2;
Это не скомпилируется правильно: компилятор говорит мне, что doStuff()
в MyPtrImpl
является чисто виртуальным, т.е. Я не смог правильно его переопределить. Если я, однако, typedef int*
, что-то вроде int_ptr
, и использую его как аргумент шаблона для MyPtrImpl
, все будет работать.
Почему компилятор не может вычесть мои намерения без typedef?