only parameters or stack-based variables can be `inout`
Paul Backus
snarwin at gmail.com
Tue Nov 26 15:57:40 UTC 2024
On Tuesday, 26 November 2024 at 04:15:35 UTC, Steven
Schveighoffer wrote:
> On Monday, 25 November 2024 at 14:24:44 UTC, Bastiaan Veelo
> wrote:
>
>> // Fishy:
>> inout(E) gun(inout(E) e)
>> {
>> //writeln(e.to!string); // only parameters or stack-based
>> variables can be `inout`
>> writeln((cast(Unqual!E)e).to!string); // OK
>> return e;
>> }
>
> Longstanding issue. When inout was first proposed, the point
> was to prevent people from using in nonsensical ways. But this
> really prevents reasonable template usage without all kinds of
> static checks.
>
> I went over this in my 2016 talk:
> https://dconf.org/2016/talks/schveighoffer.html
>
> 1. inout should just be allowed to be returned when parameters
> are not inout. The equivalent would just be const.
> 2. inout member fields should be fine.
In this case the specific limitation getting in the way is that
you cannot pass an `inout` value as an argument to a [template
value parameter][1].
[1]: https://dlang.org/spec/template.html#template_value_parameter
More information about the Digitalmars-d-learn
mailing list