Prywatny modyfikator C ++ został zignorowany na zagnieżdżonej strukturze anonimowej
Poniższy przykładowy kod kompiluje się dobrze w Visual C ++:
class Test {
private:
struct {
struct {
int privateData;
};
};
};
int main(int, char **)
{
Test test;
test.privateData = 0;
return 0;
}
Ale dlaczego? Spodziewałbym się błędu kompilatora, ponieważprivateData
element powinien być niedostępny dla głównej funkcji, ponieważ tak powinno byćprivate
jak pojemnik na pojemnik. Wiem, że bezimienne struktury nie są częścią oficjalnego C ++, ale ten projekt jest asinine.
Przy okazji próbowałem się zmienićprivate
wprotected
istruct
wunion
: wygląda na to, że kompilator odmawia honorowania modyfikatorów dostępu na anonimowych strukturach i związkach, które są zagnieżdżone w innej anonimowej strukturze lub unii.
Czy ktoś może wyjaśnić tę funkcję?