C++ 11 I stwierdzenie następujący związek:Czy w C++ 11 dozwolone są nieanonimowe związki zawierające statyczne elementy danych?
union U4 {
char c;
int i;
static int si;
};
Kiedy kompilacji kod g ++ 4.7.0 pomocą -std = C++ 11 -pedantic-błędów, pojawia się następujące błędy (z moll edycja):
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
FDIS (N3242) nie pozwalają jednoznacznie statycznych członków danych nazwanych związków, o ile widzę. Ale nie widzę również, gdzie FDIS nie może statycznych elementów danych nazwanych związków albo FDIS wielokrotnie odnoszą się do tego, co można zrobić z "niestatycznych członków danych" [sekcja 9.5 pkt 1]. W przeciwieństwie do tego sugeruje to, że standard dopuszcza statycznych członków danych związków.
Nie mam żadnego sensu dla statycznych członków danych związku. Gdybym tego potrzebował, prawdopodobnie mógłbym osiągnąć wystarczająco bliski efekt w klasie zawierającej anonimowy związek. Po prostu próbuję zrozumieć intencje normy.
Dzięki za pomoc.
Po pierwsze, lokalne typy klas nie mogą mieć statycznych elementów danych w ogóle ("§9.4.2/5"), stąd pierwszy błąd. Dla statycznych elementów danych w nielokalnym 'union' Clang kompiluje się dobrze. – Xeo