Re: ADL. Кто неправ я, компилятор или реализация STL
От: Greg Zubankov СССР  
Дата: 21.10.06 10:01
Оценка:
Здравствуйте, Kazmerchuk Pavel, Вы писали:

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

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

KP>Вопрос 2. Почему если внутри resize (для вызова begin() + _Newsize) требуется приведение типа разработчики на сделали это явно (это конечно если компилятор прав в первом вопросе)?

В стандарте поведение resize задается как:
if (sz > size())
  insert(end(), sz-size(), c);
else if (sz < size())
  erase(begin()+sz, end()); // приведения нет
else
  ; //do nothing


KP>Вопрос 3. Что делать? Править исходник вектора не хочется.

Думаю лучше объявить менее "шаблонную" функцию operator+. К примеру оставить один параметр в шаблоне.

KP>ps: с STLPort все в порядке потому, что в векторе итератор это просто голый указатель. С ним у компилятора вопросов не возникает.

Правильно, у итератора в этом случает нет предка-шаблона.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.