$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] Heads up - string_ref landing
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2012-11-26 09:13:38
On Mon, Nov 26, 2012 at 5:48 PM, Daniel James <dnljms_at_[hidden]> wrote:
> On 26 November 2012 13:26, Andrey Semashev <andrey.semashev_at_[hidden]> wrote:
>> On Mon, Nov 26, 2012 at 4:52 PM, Daniel James <dnljms_at_[hidden]> wrote:
>>> On 26 November 2012 11:56, Andrey Semashev <andrey.semashev_at_[hidden]> wrote:
>>>> The problem with std::string is the same as with string_ref - it
>>>> doesn't support implicit construction from an arbitrary range, so my
>>>> examples with custom string types would still not work.
>>>
>>> Shouldn't construction from an arbitrary range be explicit? Arbitrary
>>> implicit conversions are problematic. To get implicit construction
>>> from third party strings, I'd use some sort of explicit customisation
>>> mechanism.
>>
>> If the string_ref or range type (let's call it contiguous_range< const
>> char* >)
>
> A string isn't the same thing as a range of characters.
Why?
>> is not implicitly convertible from other string types then it
>> is useless for use cases I pointed out. The thing is to make
>> interfaces transparently support any string types.
>
> That's why I suggested a customisation mechanism. Something would
> allow you to indicate that a third party type is a string and, if
> necessary, how to get a string_ref from it. Perhaps an ADL hook, or a
> template class that is specialized for strings, or something else
> entirely.
That would mean that the range is limited to strings only. I'm not
sure this limitation is justified.