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ę?

questionAnswers(1)

yourAnswerToTheQuestion