Здравствуйте dupamid, Вы писали:
F>>Если есть класс, в нем, допустим, несколько вложенных классов, я определяю их:
D>F>>class A{
F>>public:
F>> class B;
F>> class C;
F>>};
F>>class A::B{};
F>>class A::C:public (??????)B{};
D>
F>>Где начинается область видимости A? В вижуале мне не надо писать public A::B а вот в g++ нужно. Как по стандарту?
D>Область видимости A становится доступной для поиска сразу после : так что писать полную квалификацию для B по Стандарту нет необходимости. Подробнее про точку обявления смотри 3.3.1.
Судя по всему, стандарт не вполне точен в отношении правил поиска имен, использованных в списке наследования. По крайней мере, ничего лучше 3.3.6/1 мне найти не удалось, и никакой уверенности, что этот пункт уточняет правила поиска имен в данном случае у меня нет, а точки объявления здесь совсем ни при чем.
3.3.6/1
5) The potential scope of a declaration that extends to or past the end of a class definition also extends to the regions defined by its member definitions, even if the members are defined lexically outside the class (this includes static data member definitions, nested class definitions, member function definitions (including the member function body and, for constructor functions (12.1), the ctor-initializer (12.6.2)) and any portion of the declarator part of such definitions which follows the identifier, including a parameter-declaration-clause and any default arguments (8.3.6).
По словам Bo-Staffan Lankinen, этот вопрос должен обсуждаться на следующем собрании комитета.
<< J 1.0 alpha 4 >>
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен