Здравствуйте Павел Кузнецов, Вы писали:
ПК>ПК>class Outer
ПК>{
ПК>public:
ПК> template<class T> class Inner;
ПК> class Other;
ПК>};
ПК>class Outer::Inner<Other> : Other { }; // это не компилируется
ПК>Хотя, все доступные мне компиляторы, компилирующие пример, приведенный Fiend, не компилируют этот (Borland C++ Compiler, Intel C++ Compiler, Gcc, VC++, Comeau C++).
Это совершенно неверный пример!!! Как
Вы такое можете писать
class Outer
{
public:
template<class T> class Inner;
class Other {}; // неполный тип, наследоваться от него нельзя, нужно добавить {}
};
template<> // нужно добавить template<>
class Outer::Inner<Outer::Other> : Other { }; // это не компилируется
Так будет компилироваться! Часть находящаяся в <> является частью объявления класса, так что правило, о котором я говорю начинает действовать после >.