ошибка: «шаблон» (как устранение неоднозначности) допускается только в шаблонах

У меня есть следующие определения:

typedef  boost::multi_index_container<
ModelPtr,
boost::multi_index::indexed_by<
boost::multi_index::sequenced<boost::multi_index::tag<byInsertOrder> >, // to keep order of inserting
boost::multi_index::ordered_non_unique< boost::multi_index::tag<byPriority>,
boost::multi_index::const_mem_fun<IModel,
unsigned int,
&IModel::getPriority>,
std::greater< unsigned int> // from the highest priority to the lowest
>
>
> ModelContainer;

typedef ModelContainer::template index<AOActivationList::byInsertOrder>::type ModelByInsertOrderType; (*)

Проблема в том, что когда я пытаюсь скомпилировать его с помощью gcc 4.5.3, я получаю следующую ошибку:
ошибка: «шаблон» (как устранение неоднозначности) допускается только в шаблонах
В строке отмечен (*). В Visual Studio 2008 это компилируется.

В чем причина этого? Как это исправить?

0

Решение

На этой линии:

typedef ModelContainer::template index<AOActivationList::byInsertOrder>::type ModelByInsertOrderType

убери слово template, если вы не в пределах template, как используя ModelContainer::template ... действует только если ModelContainer тип зависит от нефиксированного template параметры в текущей области.

Если бы компилятор мог выяснить полный тип ModelContainer на этой линии, использование template не допускается. Если он не может понять это наверняка, то использование template необходимо.

Решение Visual Studio компилировать или не компилировать данный фрагмент кода редко является хорошим доказательством того, что код является допустимым C ++ по какому-либо стандарту.

2

Другие решения

Других решений пока нет …