Il seguente codice di esempio si compila bene in Visual C++:C++ modificatore privato ignorato su nidificato struct anonima
class Test {
private:
struct {
struct {
int privateData;
};
};
};
int main(int, char **)
{
Test test;
test.privateData = 0;
return 0;
}
Ma perché? Mi aspetterei un errore del compilatore perché il membro privateData
dovrebbe essere inaccessibile alla funzione principale, dal momento che dovrebbe essere private
come il contenitore del contenitore. So che le strutture senza nome non fanno parte del C++ ufficiale, ma questo design è asinino.
Tra l'altro ho anche provato a cambiare private
in protected
e struct
in union
: sembra che il compilatore si rifiuta di onorare modificatori di accesso sulle strutture anonime e sindacati che sono nidificati all'interno di un altro anonimo unione struct o.
Qualcuno può spiegare questa funzione?
Sembra il bug corretto in _VS2005sp1_, quale versione stai utilizzando? Tieni presente che _anonymous structs_ non è una funzione _C++ _ standard ... –
no, sto usando VS 2012 –
@ K-ballo gcc compila anche questo ... –