Как зафиксировать 'ожидаемое основное выражение перед' ошибка в C ++ код шаблона?

Вот еще один 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;
}

Какие-либо идеи, как я могу зафиксировать это?

17
задан jwfearn 21 January 2010 в 00:18
поделиться

1 ответ

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

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

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

40
ответ дан 30 November 2019 в 11:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: