我有以下定义:
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中,它编译。</ p>
这是什么原因?如何解决?
答案 0 :(得分:2)
在这一行:
typedef ModelContainer::template index<AOActivationList::byInsertOrder>::type ModelByInsertOrderType
删除单词template
,除非您在template
范围内,因为使用ModelContainer::template ...
仅在ModelContainer
是依赖于非固定{{1}的类型时才有效当前范围内的参数。
如果编译器可以在该行上找出完整类型的template
,则不允许使用ModelContainer
。如果无法确定,则需要使用template
。
Visual Studio决定编译或不编译给定的代码块很少有证据表明代码是任何标准的有效C ++。