Сообщение об ошибке вызвано тем, что NotWorkingChild
происходит (косвенно) из SCEST<int>
, что делает SCEST
в области действия NotWorkingChild
ссылкой на класс SCEST<int>
вместо шаблона. MSVC корректен, чтобы отклонить это, и GCC4.5 должен также отклонить это (GCC4.5 имеет более правильный введенный поиск имени класса).
Вот решение, которое может работать для обоих компиляторов
class NotWorkingChild
: public EST16<SCEST>
{
public:
NotWorkingChild()
: EST16< ::SCEST >(1.0)
{
}
};
Обратите внимание, что мы используем оператор разрешения области видимости и должны поставить пробел перед ::
(в противном случае токен <:
был бы взят в качестве орграфа).
Последние новости : C ++ 0x сделает вышеописанную работу, даже если вы сделаете EST16<SCEST>
. Причина в том, что в нем говорится, что если введенное имя класса передается параметру шаблона шаблона, то введенное имя класса обрабатывается как шаблон, а не как тип. Поэтому для C ++ 0x компилятор GCC будет делать это правильно.