Следующий пример кода компилируется просто в Visual С++:
class Test {
private:
struct {
struct {
int privateData;
};
};
};
int main(int, char **)
{
Test test;
test.privateData = 0;
return 0;
}
Но почему? Я ожидаю ошибку компилятора, потому что член privateData
должен быть недоступен для функции main, так как он должен быть private
как контейнер контейнера.
Я знаю, что неназванные структуры не являются частью официального С++, но этот проект является asinine.
Кстати, я также попытался изменить private
на protected
и struct
на union
: похоже, компилятор отказывается соблюдать модификаторы доступа в анонимных структурах и объединениях, которые вложены внутри другого анонимного struct или union.
Может кто-нибудь объяснить эту функцию?