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>
這就是我的意思
VC實際上並不支持可變參數模板。他們只是模仿他們。所以這並不奇怪,這是行不通的。後面的例子不應該實際工作,'std :: vector'有多個模板參數。 – mfontanini
@mfontanini不正確。閱讀作者提到的CTP。 –
@ user1832244你的代碼在gcc 4.7.2和clang中編譯得很好,所以它可能是VS CTP引入的許多錯誤之一。 –