Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to fix 'expected primary-expression before' error in C++ template code?

Tags:

c++

gcc

templates

Here's yet another VC9 vs. GCC 4.2 compile error problem. The following code compiles fine with VC9 (Microsoft Visual C++ 2008 SP1) but not with GCC 4.2 on 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;
}

Any ideas how I can fix this?

like image 214
jwfearn Avatar asked Jan 20 '10 23:01

jwfearn


1 Answers

That should be

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

Dependent names from templates are taken to not be types unless you specify that they are via typename and assumed to not be templates unless specified via template.

like image 198
Georg Fritzsche Avatar answered Nov 10 '22 19:11

Georg Fritzsche