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?