VC ++ Ошибка Variadic-Template-Template C2244: невозможно сопоставить определение функции с существующим объявлением

это, вероятно, ошибка новичка, я использую компилятор Microsoft Visual C ++ ноябрь 2012 CTP, и когда я пытаюсь скомпилировать это:

#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>());
}

Итак, вопрос в том, как я могу добиться того же самого с помощью шаблонов

Редактировать:

Как и предполагалось, подал отчет об ошибке в Microsoft Connect с ID: 771567

Также пример вектора был плохим (это дало бы <std::_Simple_types<int>,std::_Vector_val>, но он компилируется), но если вы попробуете это с парой и аргументами шаблона:

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

ты получишь <F,G,std::pair> что я имел ввиду

2

Решение

Из MSDN относительно ошибки компилятора C2244:

Вы не можете частично специализировать шаблон функции.

Я также думаю, что вы должны объявить template перед классом:

template<typename T>
class MyClass
{
};
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]