Как исправить ошибку «ожидаемое первичное выражение до» в коде шаблона C ++? - PullRequest
16 голосов
/ 21 января 2010

Вот еще одна проблема VC9 против GCC 4.2, связанная с ошибкой компиляции. Следующий код прекрасно компилируется с VC9 (Microsoft Visual C ++ 2008 SP1), но не с GCC 4.2 на Mac:

struct C
{
    template< typename T >
    static bool big() { return sizeof( T ) > 8; }
};

template< typename X >
struct UseBig
{
    static bool test()
    {
        return X::big< char >(); // ERROR: expected primary-expression
    }                            // before 'char'
};

int main()
{
    C::big< char >();
    UseBig< C >::test();
    return 0;
}

Есть идеи, как мне это исправить?

1 Ответ

38 голосов
/ 21 января 2010

Это должно быть

return X::template big< char >();

Зависимые имена из шаблонов берутся в не be типов , если вы не укажете, что они через typename и предполагается, что не будет шаблонами если не указано с помощью template.

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