VisualStudio无法编译此代码(错误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;
}
答案 0 :(得分:1)
我的猜测是,这是因为Visual Studio 2015不完全支持嵌套的可变参数模板,并且无法正确推断出类型。
作为一项解决方法,您必须明确指定类型,因此您可以使用Func<std::map<int, double>>(m);
,Func<int, double>(m);
甚至Func<decltype(m)>(m);
(我推荐最后一个)。