我的示例代码位于
之下#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;
}
我知道如果用a += tc.template operator() < NUM >()
替换a += tc.operator()<NUM>()
可以避免编译错误,但是这个替换不能移植到Mac OS X的LLVM。
令我困惑的是A::operator()
和A::f
都是成员函数,为什么编译好但一个失败?