DIP 1016--ref T accepts r-values--Community Review Round 1

Manu turkeyman at gmail.com
Fri Jul 20 17:31:21 UTC 2018


On Fri, 20 Jul 2018 at 03:10, Dgame via Digitalmars-d
<digitalmars-d at puremagic.com> wrote:
>
> On Friday, 20 July 2018 at 09:39:47 UTC, Nicholas Wilson wrote:
> > On Friday, 20 July 2018 at 09:03:18 UTC, Dukc wrote:
> >> appending something (like .byRef or byRef!long, the latter
> >> making an implicit type conversion)
> >
> > That can't work: either it returns an expired stack temporary
> > (*very* bad), or allocates with no way to deallocate (bad).
>
> What about something like this?
>
> ----
> import std.stdio;
>
> ref T byRef(T)(T value) {
>      static T _val = void;
>      _val = value;
>
>      return _val;
> }
>
> void foo(ref int a) {
>      writeln("A = ", a);
> }
>
> void main() {
>      foo(42.byRef);
>      foo(23.byRef);
> }
> ----

Substitutes one class of edge case with a different style of edge
case. This general approach doesn't solve my biggest bugbear.


More information about the Digitalmars-d mailing list