"ожидаемый спецификатор вложенного имени перед ошибкой "const" с именем типа const в g++

у меня есть этот код на C++

template<typename T>
class DD
: public enumerables<T>

{
...
private:
    typename const DD<T>& mContainer;
}

и это дает мне два сообщения об ошибке :

  1. ошибка: ожидаемый спецификатор вложенного имени перед 'const'
  2. ошибка: недопустимый Декларатор перед ' & ' token

что с typename const код? Он компилирует нормально с индекса MSVC с++.

добавил

typename DD<T>& const mContainer; и const typename DD<T>& mContainer; дайте мне ту же ошибку.

2 ответов


что это typename что там делаешь? Вы не имеете в виду вложенный тип, поэтому typename там совершенно не нужно. Я бы сказал, что ошибка вызвана этим неоправданным использованием typename, не путем упорядочения частей декларации или чего-либо еще.

Это должно быть просто

const DD<T>& mContainer;

или даже

const DD& mContainer;

за исключением введения параметра типа шаблона, ключевое слово typename должны всегда сразу же после этого следует дополнительная глобальная область :: маркер, а затем вложенное-имя-описатель; то есть то, что имеет одно или несколько пространств имен или классов, за каждым из которых следует :: маркер.

см. правила синтаксиса в стандарте C++: 5.2 (приведение в стиле функции), 7.1.5.3 (разработанный спецификатор типа) и 7.3.3 (использование декларация.)

также, 14.6p5: "ключевое слово typename распространяются только на определенные имена, но эти имена не должны быть зависимыми."

компилятор Microsoft неправильно принимает недопустимый синтаксис.