2010-01-20 60 views
13

这是另一个VC9与GCC 4.2编译错误问题。下面的代码编译与VC9(微软的Visual C++ 2008 SP1)的罚款,但不与GCC 4.2在Mac上:如何在C++模板代码中修复“期望的主表达式”错误?

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; 
} 

任何想法如何,我可以解决这个问题?

+1

每隔一段时间就会出现一次,因为很难找到它。为了记录,GCC用于在Visual Studio没有编译时进行编译。海湾合作委员会消除了这种行为,因为它引起了很多头部划痕,并且不符合标准。 – 2010-01-21 09:38:37

回答

34

这应该是从模板

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

相关的名字被带到除非你指定,他们是通过typename类型和假设为除非通过template规定不模板

+0

工作,谢谢! – jwfearn 2010-01-20 23:45:04

相关问题