2013-06-12 47 views
0

讓我有如下定義:錯誤:「模板」(作爲消歧)只內模板

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中編譯。

這是什麼原因?如何解決它?

回答

2

在此行中:

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

刪除單詞template,除非你是template內,如使用ModelContainer::template ...只有當有效ModelContainer是依賴於在當前範圍內非固定template參數的類型。

如果編譯器能夠找出該行上的完整類型ModelContainer,則不允許使用template。如果無法確定,則需要使用template

Visual Studio決定編譯或不編譯給定的代碼塊很少有很好的證據表明代碼是有效的C++的任何標準。