Xét đoạn mã sau:Đúc con trỏ như mẫu đối số: Comeau & MSVC biên dịch, GCC không
template<int* a>
class base {};
int main()
{
base<(int*)0> test;
return 0;
}
Cả Comeau và MSVC biên dịch này mà không có vấn đề (trừ Comeau cảnh báo về một biến không sử dụng), trong khi GCC thất bại trên dòng base<(int*)0> test;
, nêu rõ
In function `int main()': a casts to a type other than an integral or enumeration type cannot appear in a constant-expression
template argument 1 is invalid
Chính xác thì nó phàn nàn về điều gì? Và ai đúng - mã này có nên biên dịch không? Cần lưu ý rằng phiên bản GCC của tôi là cực kỳ cũ (3.4.2) để có thể liên quan đến nó. Cảm ơn.
FYI: với gcc 4.4.1: test.cpp: 6: lỗi: diễn viên cho loại không phải là loại tích phân hoặc kiểu liệt kê không thể xuất hiện trong biểu thức hằng số test.cpp: 6: error: template đối số 1 không hợp lệ test.cpp: 6: lỗi: loại khai báo không hợp lệ trước ';' token – jdehaan
Cảm ơn jdehaan, vì vậy chúng tôi biết điều này không liên quan gì đến phiên bản của mình. – GRB
Chào mừng Ur. Tôi đã thử sửa đổi mã một chút để làm cho nó biên dịch. Các biến thể nhẹ không làm rõ vấn đề ... – jdehaan