Modificador privado de C ++ ignorado na estrutura anônima aninhada

O código de exemplo a seguir compila muito bem no Visual C ++:

class Test {
private:
    struct {
        struct {
            int privateData;
        };
    };
};

int main(int, char **)
{
    Test test;
    test.privateData = 0;
    return 0;
}

Mas por que? Eu esperaria um erro do compilador porque oprivateData membro deve ser inacessível para a função principal, uma vez que é suposto serprivate como o contêiner do contêiner. Eu sei que estruturas sem nome não fazem parte do C ++ oficial, mas esse design é asinino.

Pela maneira que eu também tentei mudarprivate para dentroprotected estruct para dentrounion: parece que o compilador se recusa a honrar os modificadores de acesso em estruturas e uniões anônimas que estão aninhadas dentro de outra estrutura ou união anônima.

Alguém pode explicar esse recurso?

questionAnswers(1)

yourAnswerToTheQuestion