Здравствуйте 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 должен был бы компилироваться и приведенный пример. А "дух стандарта" — понятие неконкретное и спецификацией не является.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен