Có mã này:Chuyển tiếp tuyên bố của lớp được sử dụng trong mẫu chức năng không được biên dịch bởi kêu vang ++
class A;
template <class T>
void fun() {
A a;
}
class A {
public:
A() { }
};
int main() {
fun<int>();
return 0;
}
g ++ 4.5 và g ++ 4.7 biên dịch này mà không có lỗi. Nhưng clang ++ 3.2 (thân cây) đưa ra lỗi này:
main.cpp:5:6: error: variable has incomplete type 'A'
A a;
^
main.cpp:1:7: note: forward declaration of 'A'
class A;
^
Trình biên dịch nào đúng theo tiêu chuẩn C++?
Vì bạn cố gắng tạo một đối tượng kiểu 'A' trình biên dịch phải biết kích thước của nó mà nó không thể biết mà không nhìn thấy định nghĩa đầy đủ, vì vậy clang sẽ ở ngay đây (nhưng tôi không có tham chiếu std) . –
Có bất kỳ công tắc nào do clang cung cấp để biên dịch mã như vậy không? – Sashank