Здравствуйте, 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 все в порядке потому, что в векторе итератор это просто голый указатель. С ним у компилятора вопросов не возникает.
Правильно, у итератора в этом случает нет предка-шаблона.