> -----Original Message----- > From: Martin Sebor [mailto:[EMAIL PROTECTED] On Behalf Of Martin Sebor > Sent: Monday, June 02, 2008 4:21 PM > To: [email protected] > Subject: Re: [STDCXX-550] Please peer review this change. > > Eric Lemings wrote: > > > > > >> -----Original Message----- > >> From: Martin Sebor [mailto:[EMAIL PROTECTED] > >> Sent: Monday, June 02, 2008 2:44 PM > >> To: [email protected] > >> Subject: Re: [STDCXX-550] Please peer review this change. > >> > >> Eric Lemings wrote: > >>> > >>> Would like to get another set of eyes on this before I submit. > >>> > >>> $ svn diff include/deque > >>> Index: include/deque > >>> > =================================================================== > >>> --- include/deque (revision 662487) > >>> +++ include/deque (working copy) > >>> @@ -749,7 +749,7 @@ > >>> void _C_insert (const iterator &__it, > >>> _IntType __n, _IntType __x, int) { > >>> // see 23.1.1, p9 and DR 438 > >>> - _C_insert_n (__it, __n, __x); > >>> + _C_insert_n (__it, __n, const_reference (__x)); > >> I suspect this is not correct. Suppose the type of __x is > >> a 4 byte int and const_reference is an 8 byte long. The cast > >> will make _C_insert_n() to read 4 bytes past the end of __x. > >> A better fix might be to cast __x to value_type, as long as > >> doing so doesn't violate [sequence.reqmts]. > > > > Yep. Good call. Will change to value_type() cast. > > Do read DR 438 before applying the cast. There are some obscure > corner cases here, e.g., IntType being a user-defined "integer- > like" type. I don't know if we support this case now, or if we > do, if it's being tested, but suffice it to say that there are > subtle differences between direct-initialization either via > a function-style cast or static_cast, or copy-initialization > (passing arguments to functions).
I did read the DR briefly. Perhaps I should add some conditional compilation so that __x is converted using value_type() only when using Sun C++? That would limit the scope of the change and the issue only relates to this compiler anywho. Or should I just skip it entirely and leave the warnings as they are? Brad.
