C++ Logo


Advanced search

Subject: Re: [std-proposals] Operator for reference casting
From: Barry Revzin (barry.revzin_at_[hidden])
Date: 2021-01-15 09:26:36

On Fri, Jan 15, 2021 at 7:49 AM Jean-Baptiste Vallon Hoarau via
Std-Proposals <std-proposals_at_[hidden]> wrote:

> Hello everyone,
> I think you are all aware how verbose perfect forwarding is. I haven't
> seen any proposal that could tackle this (admittedly minor) issue so far,
> except the one on hygienic macros.
> So what if we had an operator for casting to a reference?
> For example, given a value x, than the following could be equivalent :
> x& -> static_cast<decltype(x)&>(x)
> x&& -> static_cast<decltype(x)&&>(x)
> This would make forwarding a lot less cumbersome to write/read (goodbye
> decltype(x)(x), hello x&&). However, I don't see many use cases for
> explicit lvalue cast, and this would be at odd with lambda capture syntax.
> Let me know what you think.
> -Jean-Baptiste

I'd written this a while ago (
which would be a prefix operator >> for forwarding. This got rejected in
2017, >> is just a bad choice in the context of templates which are already
using a lot of angle brackets.

Prefix && is a gcc extension so isn't an option. Postfix && looks like it's
starting the beginning of a logical conjunction.

In discussion of my paper, the possibility of a good-but-nonconflicting
keyword was brought up and people suggested declfwd (vote was 0-10) and
fwdexpr (vote was 7-5). The best option here seems to be to add some kind
of hygienic macro language feature such that we can introduce std::fwd(x)
to actually be a function that does forwarding.

Barring that, I don't know if we can just by fiat say that std::fwd is a
magic thing that is not addressable (we do already say that in general for
standard library functions) that Just Works because of Compiler Magic.


STD-PROPOSALS list run by std-proposals-owner@lists.isocpp.org

Standard Proposals Archives on Google Groups