incubator-stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Sebor <se...@roguewave.com>
Subject Re: string cow bug ([Fwd: Fwd: Update: string COW])
Date Mon, 28 Jul 2008 20:57:30 GMT
Farid Zaripov wrote:
>> -----Original Message-----
>> From: Martin Sebor [mailto:msebor@gmail.com] On Behalf Of Martin Sebor
>> Sent: Friday, June 13, 2008 7:12 PM
>> To: dev@stdcxx.apache.org
>> Subject: string cow bug ([Fwd: Fwd: Update: string COW])
>>
>> ...attached is a test case I got from a fellow attendee of my 
>> meeting for what at first blush looks like a COW bug in 
>> stdcxx string. The expected output on line 4 is:
>>
>> 2. cc1: 'H'
>>
> 
> 21.3.1 p4:
> -----------------------------
> 4 References, pointers, and iterators referring to the elements of a
> basic_string sequence may be invalidated by the
> following uses of that basic_string object:
> - As an argument to non-member functions swap() (21.3.8.8), operator>>()
> (21.3.8.9), and getline() (21.3.8.9).
> - As an argument to basic_string::swap().
> - Calling data() and c_str() member functions.
> - Calling non-const member functions, except operator[], at, begin,
> rbegin, end, and rend.
> - Following construction or any of the above uses, except the forms of
> insert and erase that return iterators, the
> first call to non-const member functions operator[], at, begin, rbegin,
> end, or rend.
> -----------------------------
> 
>   The first call on non-const operator[] for s1 object located in "s1[0]
> = 'H';" line. So after that line any references to the
> elements are invalidated and cc1 should not be used after that line.

But the spec says:

   "...non-const member functions, *except* operator[]..."

So the non-const overload of string::operator[]() is not
allowed to invalidate references.

Martin

Mime
View raw message