簡體   English   中英

奇怪的 GCC 錯誤:“,”標記之前的預期主表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM