2010-01-20 34 views
13

Đây là một vấn đề lỗi biên dịch VC9 so với GCC 4.2 khác. Các mã sau đây biên dịch tốt với VC9 (Microsoft Visual C++ 2008 SP1) nhưng không phải với GCC 4.2 trên Mac:Cách sửa lỗi 'biểu thức chính trước kỳ vọng' trong mã mẫu 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; 
} 

Bất kỳ ý tưởng làm thế nào tôi có thể sửa lỗi này?

+1

Điều này xuất hiện thường xuyên vì rất khó tìm kiếm. Đối với hồ sơ, GCC được sử dụng để biên dịch này khi Visual Studio không. GCC loại bỏ hành vi này bởi vì nó gây ra rất nhiều đầu gãi và không tuân thủ các tiêu chuẩn. –

Trả lời

34

Đó nên là

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

tên phụ thuộc từ các mẫu được đưa đến không được loại trừ khi bạn chỉ định rằng họ là qua typename và giả định không được mẫu trừ khi xác định thông qua template .

+0

Điều đó có hiệu quả, cảm ơn! – jwfearn

Các vấn đề liên quan