Re[3]: ADL. Кто неправ я, компилятор или реализация STL
От: Greg Zubankov СССР  
Дата: 21.10.06 13:36
Оценка:
Здравствуйте, night beast, Вы писали:

KP>>>Вопрос 1. Почему компилятор лезет в мое пространство имен, проводя зависимый поиск, хотя аргументы в begin() + _Newsize к нему ни какого отношения не имеют?

GZ>>Компилятор прав. Посколько vector::iterator наследуется от шаблона std::iterator, поиск (ADL) проводится также в пространствах имен параметров шаблона. Первый из списка параметров std::iterator как раз Ваш mtr::Matrix.

NB>а разве сначала не производится обычный поиск в пространстве std (где определены vector::iterator и std::iterator) ?


Я написал "проводится также". Естественно сначала проводится ordinary unqualified lookup. Затем проводится ADL. Из двух найденных operator+ однозначно выбирается mtr::operator+.

Clause 3.4.2 verse 2a:

If the ordinary unqualified lookup of the name finds the declaration of a class member function, the associated
namespaces and classes are not considered. Otherwise the set of declarations found by the lookup of
the function name is the union of the set of declarations found using ordinary unqualified lookup and the set
of declarations found in the namespaces and classes associated with the argument types.


PS. если бы vector::iterator::operator+ был объвлен без квалификатра const, компилятор выдал бы ошибку неоднозначности выбора
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.