C++ 如何修复';在'之前应为主表达式;C+中的错误+;模板代码?

C++ 如何修复';在'之前应为主表达式;C+中的错误+;模板代码?,c++,templates,gcc,C++,Templates,Gcc,这里还有另一个VC9与GCC4.2编译错误问题。下面的代码用VC9(微软Visual C++ 2008 SP1)编译,但在MAC上没有用GCC 4.2编写: struct C { template< typename T > static bool big() { return sizeof( T ) > 8; } }; template< typename X > struct UseBig { static bool test()

这里还有另一个VC9与GCC4.2编译错误问题。下面的代码用VC9(微软Visual C++ 2008 SP1)编译,但在MAC上没有用GCC 4.2编写:

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;
}
struct C
{
模板
静态bool big(){return sizeof(T)>8;}
};
模板
结构UseBig
{
静态布尔测试()
{
返回X::big();//错误:应为主表达式
}//在“char”之前
};
int main()
{
C::大();
UseBig::test();
返回0;
}
有什么办法可以解决这个问题吗?

应该可以

return X::template big< char >();
返回X::模板大();

模板中的从属名称被视为非类型,除非您通过
typename
指定它们,并且假设它们不是模板,除非通过
template

指定。这经常出现,因为很难搜索它。作为记录,GCC在visualstudio没有编译时就编译了这个。GCC删除了这个行为,因为它引起了很多麻烦,并且不符合标准。