> -----Original Message----- > From: Martin Sebor [mailto:[EMAIL PROTECTED] > Sent: Thursday, February 08, 2007 2:36 AM > To: stdcxx-dev@incubator.apache.org > Subject: Re: [PATCH] Fix of STDCXX-268, STDCXX-331 > > Farid Zaripov wrote: > > Attached is a proposed patch for fix the bugs STDCXX-268 > and STDCXX-331. > > If the bodies of the functions are the same wouldn't be > better to call one from the other rather than introducing the macro? > (The macro makes it impossible to step through the functions > in most debuggers. I know we have macros in there already but > we don't need to make things worse by adding more :) I agree that it would be better.
> Or are we invoking the macro with arguments of different > types each time (Iterator, pointer, const_pointer) because > we're working around the lack of member templates? Yes. If _RWSTD_NO_INLINE_MEMBER_TEMPLATES macro is defined then the range form of the method insert is present twice with types const_pointer and const_iterator. > (We should discuss and decide if we want to keep these workarounds or if > it's time to get rid of them and assume that the compiler is reasonably modern). I don't have the compiler without supporting the inline mebmer templates. We need to make the list of the compilers without supporting the inline member templates and then decide. > Btw., I wonder if we could simplify (optimize) this code so > as to call erase(__start, __it) in the catch block instead of > looping (the idea is that the range form of erase() might be > more efficient than calling the single form repeatedly): Yes, but to get __start we need use loop or std::advance, because __start = __it - __n. iterator __start = __it; std::advance (__start, -n); erase (__start, __it); Another approach is to remember the iterator after first successful insert (__it, *__first) operation. What do you prefer? Farid.