шаблон инициализации базового класса - PullRequest
4 голосов
/ 02 мая 2011

в то время как в Visual C ++ приведенный ниже код принят, g ++ сгенерирует ошибку: msgstr "у производного класса нет имени поля Base" что соответствует стандарту?

template <class T>
class Base
{
public:
    Base(){};
};

template <class T>
class Derived:public Base<T>
{
public:
    Derived():Base(){}
};

Кстати: оба принимают

Derived():Base<T>(){}

так что я буду следить за gcc

1 Ответ

6 голосов
/ 02 мая 2011

MSVC ++ неверен. Base это шаблон, а не тип.

Обратите внимание, что в обычном случае Base ищется в области действия Derived<T>, что означает, что он сначала найдет введенное имя класса, унаследованное от Base<T>, что относится к типу Base<T>. Но поскольку у вас есть зависимый базовый класс, имя, унаследованное от Base<T>, не найдено (область действия базового класса не рассматривается).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...