我仍然在试图从迁移到MSVC GCC,但我似乎无法找到解决如下问题:
template < typename A, typename B, typename C, typename D >
class Test
{
public:
Test (B* pObj, C fn, const D& args) : _pObj(pObj), _fn(fn), _args(args)
{
}
A operator() ()
{
return _args.operator() < A, B, C > (_pObj, _fn); // error: expected primary-expression before ',' token
}
B* _pObj;
C _fn;
D _args;
};
Run Code Online (Sandbox Code Playgroud)
请帮忙!
Pra*_*rav 21
试试return _args.template operator() < A, B, C > (_pObj, _fn);.
没有template关键字,解析就会有所不同.如果没有额外使用template,编译器不会知道后面的小于令牌(<)实际上并不是"小于",而是模板参数列表的开头.
14.2/4
当成员模板专业化的名称出现之后.或 - >在postfix-expression中,或在qualified-id中的nested-name-specifier之后,postfix-expression或qualified-id显式依赖于template-parameter(14.6.2),成员模板名称必须是以关键字模板为前缀.否则,假定该名称命名非模板.
PS:阅读此Stackoverflow FAQ条目