Шаблоны. Почему тут ошибка?
От: Аноним  
Дата: 10.05.06 07:25
Оценка:
class Unsafe{
private:
Unsafe* m_pNextUnsafe;
public:
Unsafe(){}
virtual ~Unsafe(){}

Unsafe* GetNext() { return m_pNextUnsafe; }
};

template<class T>
class LClass : public Unsafe{
public:
LClass();
virtual ~LClass();

LClass* GetNext(){ return (LClass*) Unsafe::GetNext(); }
};

LClass<class T>::LClass(){}
LClass<class T>::~LClass(){} <---- тут ошибка

error C2906: 'LClass<T>::~LClass(void)' : explicit specialization requires 'template <>'
with
[
T=T
]

Но ! Если деструктор описать так
template<>
LClass<class T>::~LClass(){}

то всё отлично.
Причём ! Если убрать наследование у LClass
то при описаном вот так деструктором
LClass<class T>::~LClass(){}
возникавшая ранее ошибка C2906
не возникает!

Очень хочется понят:
Почему при разных условиях нследуем/не наследуем возникает / не возникает ошибка C2906
Почему когда наследуем ошибка C2906 возникает толькт у деструктора.

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.