1

VisualStudio не может скомпилировать этот код ошибки (C2976)VS2015 ошибка C2976

но GCC и Clang может скомпилировать этот код

почему ???

#include <iostream> 
#include <map> 

template <typename... ARGS> 
void Func(const std::map<ARGS...>& m) 
{ 
    //... 
} 

template <typename T> 
void Func(const T& t) 
{ 
    //... 
} 

int main() 
{ 
    std::map<int, double> m; 
    Func(m); // error C2976: 'std::map': too few template arguments 
    Func(123); // OK 
    return 0; 
} 
+1

Неверно? –

+1

Возможный дубликат [Вывод шаблона не выполняется для std: map в качестве параметра шаблона] (http://stackoverflow.com/questions/26059219/template-deduction-fails-for-stdmap-as-template-parameter) – cromod

ответ

1

Я думаю, что это происходит потому, что Visual Studio 2015 полностью не поддерживает вложенные VARIADIC шаблоны, и он не может вывести тип правильно.

В качестве работы вы должны указать типы явно, поэтому вы можете использовать Func<std::map<int, double>>(m);, Func<int, double>(m); или даже Func<decltype(m)>(m); (я рекомендую последний).

Смежные вопросы