2

這可能是newb的錯誤,我正在使用Microsoft Visual C++編譯器2012年11月CTP,並且當我嘗試編譯此代碼時:VC++ Variadic-Template-Template錯誤C2244:無法將函數定義與現有聲明匹配

#include <tuple> 

class A 
{ 
public: 
    template <class... Fs, template <class...> class T> 
    void foo(T<Fs...>); 
}; 

template <class... Fs, template <class...> class T> 
void A::foo(T<Fs...>) 
{ 
} 

int main() 
{ 
    A a; 
    a.foo(std::make_tuple(10,10)); 
} 

我得到以下錯誤:

error C2244: 'A::foo' : unable to match function definition to an existing declaration 
definition 
'void A::foo(T<Fs...>)' 
existing declarations 
'void A::foo(T<Fs...>)' 

如果我是內聯彙編和做什麼,我想要做的功能,但我將不得不把該函數在頭文件

#include <vector> 

class A 
{ 
public: 
    template <class Fs, template <class> class T> 
    void foo(T<Fs>); 
}; 

template <class Fs, template <class> class T> 
void A::foo(T<Fs>) 
{ 
} 

int main() 
{ 
    A a; 
    a.foo(std::vector<int>()); 
} 

所以現在的問題是如何能夠做到同樣的事情可變參數模板

編輯:

至於建議在微軟提交了一份bug報告但是下面的代碼,並沒有錯誤編譯連接與ID :771567

此外,矢量示例是壞的(它會給<std::_Simple_types<int>,std::_Vector_val>,但它確實編譯),但如果你嘗試與一對第二模板參數:

template <class F, class G, template <class,class> class T> 

你會得到<F,G,std::pair>這就是我的意思

+1

VC實際上並不支持可變參數模板。他們只是模仿他們。所以這並不奇怪,這是行不通的。後面的例子不應該實際工作,'std :: vector'有多個模板參數。 – mfontanini

+2

@mfontanini不正確。閱讀作者提到的CTP。 –

+2

@ user1832244你的代碼在gcc 4.7.2和clang中編譯得很好,所以它可能是VS CTP引入的許多錯誤之一。 –

回答

相關問題