Извините за не очень описательный заголовок вопроса. Я не очень уверен, как это описать, надеюсь, я смогу сделать это позже, если кто-нибудь сможет мне это объяснить.
Я собирался прийти сюда и спросить, почему работает следующий пример. Это демонстрировало поведение, на которое я надеялся, но я не был уверен, почему, или было ли это стандартным, или мне просто повезло с компилятором. Во всяком случае, разбирая минимальный рабочий пример для публикации здесь, я обнаружил, что он не делает то, что я думал. Так что вот оно ...
struct Foo {
enum BAR { A, B, C, D, E };
private: typedef BAR BAR;
};
int main(int argc, char* argv[]) {
int x = (Foo::BAR)42;
int y = Foo::D;
}
То, что, кажется, происходит, и что меня весьма порадовало, это то, что Foo принимает константы перечисления, после чего BAR становится приватным. Так что я не получаю ошибку на int y =
, но я получаю Foo::BAR
частную ошибку на int x=
. Однако кажется, что это работает только с 5 или более константами в перечислении, удалите это E
, и все это прекрасно скомпилируется, то есть BAR
остается открытым.
Что здесь на работе? Спасибо.
(PS. Компилятор GCC 4.4.3)