Возможно, вы заметили, что более поздние версии gcc более строгие в отношении стандартов ( см. Этот вопрос )
Все унаследованные члены шаблонного класса должны вызываться с использованием полного имени, т.е.
ParentClass<T>::member
вместо member
Но все же у меня есть много старого кода, который не уважает это. Добавление using ParentClass<T>::member
для каждого используемого члена в каждом классе - довольно трудная задача. Есть ли способ сделать что-то вроде using ParentClass<T>::*
? Я хотел бы это лучше, чем отключить эту проверку в g ++, но если есть способ, как я могу деактивировать его?
Редактировать
Согласно C ++ FAQ (спасибо sth), это единственный способ правильно решить унаследованные имена переменных-членов:
Измените вызов с f()
на this->f()
. Поскольку это всегда неявно зависит в шаблоне, this->f
является зависимым, и поэтому поиск откладывается до фактического создания шаблона, после чего рассматриваются все базовые классы.
Вставка using B<T>::f
; незадолго до звонка f()
.
Измените вызов с f () на B<T>::f()
.
Итак, теперь ищем правильный переключатель, чтобы деактивировать полное разрешение имен ...