[英]Strange GCC error: expected primary-expression before ',' token
我仍在嘗試從 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;
};
請幫忙!
試試return _args.template operator() < A, B, C > (_pObj, _fn);
.
如果沒有template
關鍵字,解析會有所不同。 如果沒有額外使用template
,編譯器不知道后面的小於標記 (<) 並不是真正的“小於”,而是模板參數列表的開頭。
14.2/4
當成員模板專業化的名稱出現后。 或 -> 在后綴表達式中,或在限定標識中的嵌套名稱說明符之后,並且后綴表達式或限定標識顯式依賴於模板參數(14.6.2),成員模板名稱必須是以關鍵字 template 為前綴。 否則,該名稱被假定為命名非模板。
PS:閱讀此Stackoverflow 常見問題解答條目
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.