Trong C++ 11 Tôi tuyên bố sự kết hợp sau đây:Có phải C++ 11 cho phép các tổ chức không giấu tên có chứa các thành viên dữ liệu tĩnh không?
union U4 {
char c;
int i;
static int si;
};
Khi tôi biên dịch mã này với g ++ 4.7.0 sử dụng -std = C++ 11 -pedantic-lỗi, tôi nhận được các lỗi sau đây (với chỉnh sửa nhỏ):
error: local class ‘union U4’ shall not have static data member ‘int U4::si’ [-fpermissive]
error: ‘U4::si’ may not be static because it is a member of a union
các doanh nghiệp FDI (N3242) không rõ ràng phép thành viên dữ liệu tĩnh của công đoàn được đặt tên, như xa như tôi có thể nhìn thấy. Nhưng tôi cũng không thấy nơi FDIS không cho phép thành viên dữ liệu tĩnh của các tổ chức được đặt tên hoặc FDIS liên tục tham khảo những gì có thể được thực hiện với "thành viên dữ liệu không tĩnh" [phần 9.5 đoạn 1]. Ngược lại, điều đó cho thấy tiêu chuẩn cho phép các thành viên dữ liệu tĩnh của các công đoàn.
Tôi không có ý định sử dụng nào cho một thành viên dữ liệu tĩnh của một công đoàn. Nếu tôi cần nó tôi có thể có thể có được một hiệu ứng đủ gần với một lớp học có chứa một liên minh vô danh. Tôi chỉ cố hiểu mục đích của tiêu chuẩn.
Cảm ơn sự giúp đỡ.
Trước hết, loại lớp địa phương không được phép có thành viên dữ liệu tĩnh nói chung ('§9.4.2/5'), do đó, đó là nơi lỗi đầu tiên của bạn xuất phát. Đối với thành viên dữ liệu tĩnh trong một liên kết không phải cục bộ, «Clang» biên dịch tốt. – Xeo