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;
}
最佳答案
我的猜测是,这是因为 Visual Studio 2015 不完全支持嵌套可变参数模板,并且无法正确推断类型。
作为解决方法,您必须明确指定类型,因此您可以使用 Func<std::map<int, double>>(m);
, Func<int, double>(m);
甚至 Func<decltype(m)>(m);
(我推荐最后一个)。
关于c++ - VS2015错误C2976,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36956725/