C++ 如何修复';在'之前应为主表达式;C+中的错误+;模板代码?
这里还有另一个VC9与GCC4.2编译错误问题。下面的代码用VC9(微软Visual C++ 2008 SP1)编译,但在MAC上没有用GCC 4.2编写: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()
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删除了这个行为,因为它引起了很多麻烦,并且不符合标准。