C++ 为什么模板运算符上出现编译错误C2951,而模板方法上没有?

C++ 为什么模板运算符上出现编译错误C2951,而模板方法上没有?,c++,visual-studio,C++,Visual Studio,下面是我的示例代码 #include <iostream> using namespace std; #define NUM 1 class A { public: template <int N> int operator()() { return N; } template <int N> int f() { return this->operator()<N>(); } }; template &l

下面是我的示例代码

#include <iostream>
using namespace std;
#define NUM 1

class A
{
public:
    template <int N>
    int operator()() { return N; }

    template <int N>
    int f() { return this->operator()<N>(); }
};

template <class TC>
int foo(TC& tc)
{
    int a = tc.template f < NUM > ();        // OK.
    a += tc.template operator() < NUM > ();  // Error C2951 on VisualStudio 2013
    return a;
}

int main(void)
{
    A a;
    cout << foo(a) << endl;
    return 0;
}
#包括
使用名称空间std;
#定义NUM 1
甲级
{
公众:
模板
int运算符(){return N;}
模板
int f(){返回此->运算符();}
};
模板
国际足联(TC&TC)
{
int a=tc.template f();//确定。
a+=tc.template运算符()();//VisualStudio 2013上出现错误C2951
返回a;
}
内部主(空)
{
A A;

cout用GCC和Clang编译。我猜这是Visual Studio中的一个bug。是的,GCC和Clang都可以。我的项目已经为linux、android和ios编译,除了VS。