Re[4]: Scope
От: Павел Кузнецов  
Дата: 13.09.02 09:25
Оценка:
Здравствуйте dupamid, Вы писали:

ПК>>Судя по всему, стандарт не вполне точен в отношении правил поиска имен, использованных в списке наследования. По крайней мере, ничего лучше 3.3.6/1 мне найти не удалось, и никакой уверенности, что этот пункт уточняет правила поиска имен в данном случае у меня нет, а точки объявления здесь совсем ни при чем.


ПК>>По словам Bo-Staffan Lankinen, этот вопрос должен обсуждаться на следующем собрании комитета.


D>В общем, по-моему, все достаточно ясно 3.3.1\4:

D>After the point of declaration of a class member, the member name can be looked up in the scope of its class.

Это говорит совсем о другом: само объявленное имя может быть найдено при поиске имен в области видимости класса. Это совсем не говорит о том, что при определении вложенного класса вне тела содержащего, поиск имен из списка базовых классов должен осуществляться в области видимости содержащего класса. Более того, список базовых классов в определении класса является частью определения самого класса, а не его членов, поэтому, например, список базовых классов вложенного класса может содержать закрытые имена содержащего класса.

D>Из пункта 3.3.1\5 следует, что точка объявление находится после имени класса, т.е. даже перед «:»


Снова-таки, это никак не говорит, в какой области видимости должен осуществляться поиск имен из списка базовых классов. А точка объявления вложенного класса находится еще раньше — там, где он был объявлен внутри содержащего класса.

D>(хотя там ничего находиться не может)


Может, например:

class Outer
{
public:
  template<class T> class Inner;

  class Other;
};

class Outer::Inner<Other> : Other { }; // это не компилируется


Хотя, все доступные мне компиляторы, компилирующие пример, приведенный Fiend, не компилируют этот (Borland C++ Compiler, Intel C++ Compiler, Gcc, VC++, Comeau C++).

D>Если вопрос будет поднят в комитете, то за результат можно не беспокоиться, так как дух Стандарта говорит, что искать надо.


Вопрос звучал так: "Как по стандарту?" Пока что точного ответа я найти не могу, т.к. согласно 3.3.6/1 должен был бы компилироваться и приведенный пример. А "дух стандарта" — понятие неконкретное и спецификацией не является.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.