это, вероятно, ошибка новичка, я использую компилятор Microsoft Visual C++, ноябрь 2012 г., и когда я пытаюсь скомпилировать это:
#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>
, что я и имел в виду
std::vector
имеет более одного параметра шаблона. - person mfontanini   schedule 17.11.2012