C++ Logo

std-discussion

Advanced search

Re: std::get on const rvalue

From: Bo Persson <bo_at_[hidden]>
Date: Wed, 7 Dec 2022 13:27:46 +0100
On 2022-12-07 at 13:09, Yongwei Wu via Std-Discussion wrote:
> Thanks for the response.
>
> Right, it seems there is no harm in forwarding. But my question is in
> the other direction: What possible harm could there be in real
> scenarios, if there were no special treatment for the const rvalue?

In general, a const lvalue reference allows a conversion to a type that
can bind to the reference. Perhaps we want to avoid that?


>
> On Wed, 7 Dec 2022 at 19:22, Lénárd Szolnoki via Std-Discussion
> <std-discussion_at_[hidden]> wrote:
>>
>> Hi,
>>
>> This just forwards. I don't think that there is anything inherently wrong or incorrect with a const rvalue, other than being mostly useless. Conceptually an expiring const object absolutely makes sense, although normally you can't make much more use of it than with a const lvalue.
>>
>> No harm in forwarding it.
>>
>> Cheers,
>> Lénárd
>>
>> On 7 December 2022 10:49:34 GMT, Yongwei Wu via Std-Discussion <std-discussion_at_[hidden]> wrote:
>>>
>>> I am wondering how useful is const rvalue, and I've found some good
>>> discussion here:
>>>
>>> https://stackoverflow.com/questions/4938875/do-rvalue-references-to-const-have-any-use
>>>
>>> A question remains unanswered: Why do we support std::get on a const
>>> rvalue of tuple (or variant)? Apart from the syntactic symmetry, what
>>> practical purpose does it serve? I.e. if one removes the following
>>> overload (and keeps the remaining three):
>>>
>>> template< class T, class... Types >
>>> constexpr const T&& get( const tuple<Types...>&& t ) noexcept;
>>>
>>> Can anything bad happen? And under which situations?
>>>
>>> Thanks in advance.
>>>
>>> Best regards,
>>>
>>> Yongwei
>>>

Received on 2022-12-07 12:27:55