I have following definitions:
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; (*)
The problem is that when I try to compile it with gcc 4.5.3 I get following error: error: ‘template’ (as a disambiguator) is only allowed within templates In line marked with (*). In Visual Studio 2008 it compiles.
What is the reason of that? How to fix it?
On this line:
remove the word
template, unless you are within atemplate, as usingModelContainer::template ...is only valid ifModelContaineris a type dependent on non-fixedtemplateparameters in the current scope.If the compiler could figure out the full type of
ModelContaineron that line, the use oftemplateis not allowed. If it couldn't figure it out for certain, then the use oftemplateis required.Visual studio's decision to compile or not compile a given chunk of code is rarely good evidence that the code is valid C++ by any standard.