Itsumo sobani, itsumo hitori
Доброе утро. Недавно писал код и встретил непонятные ошибки компилятора (ввиду недостатка знаний). Ошибки я обошёл, но вопрос остался.

Вопрос 1.
template typename<T> typedef std::list<T> ::iterator ListIt;
Я как-то сделал подобный шаблон итератора от списка указанного типа (потом писать ListIt, например), но он потерялся, а сейчас нивкакую не удаётся - то ему typename перед typedef, то просто typedef не нравится.

Вопрос 2.
paste.org.ru/?v1mace
Моя логика: Параметр шаблона никак не используется. Определение структуры от него не зависит. Список из этих структур.
Однако компилятор требует либо typename перед определением итератора, либо можно вынести определение структуры из класса (не меняя вообще). А в таком виде пишеи, что MyList зависимый (от чего?) тип. Причём тока если я делаю итератор. Просто объявить MyList X; без проблем.

@темы: Вопрос, C++

Комментарии
16.12.2014 в 13:40

IDDQD - Команда молодости нашей, команда, без которой мне не жить.
По первому вопросу - потому что такая фишка появилась только начиная с C++11, и в этой конструкции вместо typedef надо использовать using.
По второму вопросу - ну, gcc доходчиво объясняет. :) У тебя MyStruct косвенно зависит от шаблона. Просто потому, что определена внутри шаблонного класса. Чтобы излишне не усложнять компилятор (и без того сложный) тебя просят в dependent scope явно указывать - где идёт отсылка к типам, а где - нет.