Странная ошибка GCC: ожидаемое первичное выражение перед токеном ',' - PullRequest
6 голосов
/ 27 апреля 2011

Я все еще пытаюсь перейти с 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;
};

Пожалуйста, помогите!

1 Ответ

20 голосов
/ 27 апреля 2011

Попробуйте return _args.template operator() < A, B, C > (_pObj, _fn);.

Без ключевого слова template синтаксический анализ будет другим. Без этого дополнительного использования template компилятор не знает, что следующий токен «<» означает не «меньше чем», а начало списка аргументов шаблона. </p>

14,2 / 4

Когда имя специалиста шаблона члена появляется после. или -> в выражении postfix или после спецификатора nested-name в квалифицированном идентификаторе, а выражение postfix или уточненный идентификатор явно зависит от параметра-шаблона (14.6.2), шаблон элемента имя должно начинаться с ключевого слова template . В противном случае предполагается, что имя не является шаблоном.

P.S: Прочитайте это Ввод часто задаваемых вопросов по Stackoverflow

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...