Implement N3762 string_view: a non-owning reference to a string.

Peter A. Bigot pab@pabigot.com
Tue Dec 17 16:06:00 GMT 2013


On 11/20/2013 08:09 AM, Ed Smith-Rowland wrote:
> On 11/18/2013 09:08 AM, Daniel Krügler wrote:
>> 2013/11/15 Ed Smith-Rowland <3dw4rd@verizon.net>:
>>> Greetings,
>>>
>>> As the title says.  It's a pretty simple class" a non-mutating read-only
>>> view into a const CharT* or a basic_string.
>>>
>>> Built and tested on x86_64-linux.
>>>
>>> OK?
>> Sorry, if this is documented somewhere, but is this intended to implement
>>
>> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3762.html
>>
>> ? I don't think that your implementation is valid, because it maps an
>> empty string view into a NULL data pointer. But according to the
>> specification of data() the return type, this isn't feasible:
>>
>> <quote>
>> constexpr const charT* data() const noexcept;
>>
>> Returns: A non-null pointer p such that p + i == &operator[](i) for
>> each i in [0,size()).
>> </quote>
>>
>> - Daniel
>>
> Right.
>
> Here is a fix that introduces an constexpr unit length string to
> represent empty strings so that refs to empty strings don't point to the
> ether.
>

Thanks for providing this feature; I'm finding it very useful.

There's a small problem with this fix in that some zero-length
string_views should remain pointing into the referenced object, and not
be remapped to the constexpr one. This showed up after fixing a boundary
condition problem with substr, recorded in:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59529

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59530 notes a similar
problem with operator[], and
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59531 fixes a buffer overrun
in copy().  Proposed patches are attached to each issue.

Peter



More information about the Libstdc++ mailing list