tags:

views:

174

answers:

2

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?

+6  A: 

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.

Georg Fritzsche
That worked, thanks!
jwfearn
+1  A: 

the answer was here with a little quote of the C++'03 Standard

f4