[PATCH] PR libstdc++/79162 ambiguity in string assignment due to string_view overload (LWG 2946)
Daniel Krügler
daniel.kruegler@gmail.com
Sun Jul 30 13:01:00 GMT 2017
2017-07-28 22:40 GMT+02:00 Daniel Krügler <daniel.kruegler@gmail.com>:
> 2017-07-28 22:29 GMT+02:00 Daniel Krügler <daniel.kruegler@gmail.com>:
>> 2017-07-28 22:25 GMT+02:00 Tim Song <t.canens.cpp@gmail.com>:
>>> On Fri, Jul 28, 2017 at 4:10 PM, Daniel Krügler
>>> <daniel.kruegler@gmail.com> wrote:
>>>> + // Performs an implicit conversion from _Tp to __sv_type.
>>>> + template<typename _Tp>
>>>> + static __sv_type _S_to_string_view(const _Tp& __svt)
>>>> + {
>>>> + return __svt;
>>>> + }
>>>
>>> I might have gone for
>>>
>>> + static __sv_type _S_to_string_view(__sv_type __svt) noexcept
>>> + {
>>> + return __svt;
>>> + }
>>>
>>> With that, we can also use noexcept(_S_to_string_view(__t)) to make up
>>> for the absence of is_nothrow_convertible (basically the same thing I
>>> did in LWG 2993's PR).
>>
>> Agreed, that makes very much sense. I will adjust the P/R, but before
>> I resubmit I would like to get feedback whether the other two compare
>> functions also should become conditionally noexcept.
>
> Locally I have now performed the sole change of the _S_to_string_view
> declaration getting rid of the template, but would also like to gather
> feedback from the maintainers whether I should also change the form of
> the conditional noexcept to use the expression
>
> noexcept(_S_to_string_view(__t))
>
> instead of the current
>
> is_same<_Tp, __sv_type>::value
>
> as suggested by Tim Song.
>
> I'm asking also, because I have a paper proposing to standardize
> is_nothrow_convertible submitted for the upcoming C++ mailing - This
> would be one of the first applications in the library ;-)
A slightly revised patch update: It replaces the _S_to_string_view
template by a simpler _S_to_string_view function as of Tim Song's
suggestion, but still uses the simplified noexcept specification
deferring it to a future application case for is_nothrow_convertible.
Furthermore now all three compare function templates are now
(conditionally) noexcept by an (off-list) suggestion from Jonathan
Wakely.
Thanks,
- Daniel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ChangeLog_79162.patch
Type: application/octet-stream
Size: 2161 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20170730/a64a39c3/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 79162.patch
Type: application/octet-stream
Size: 43088 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20170730/a64a39c3/attachment-0001.obj>
More information about the Libstdc++
mailing list