Extend the call site default argument expansion mechanism?

Yuxuan Shui yshuiv7 at gmail.com
Tue May 15 11:53:41 UTC 2018


On Friday, 11 May 2018 at 18:55:03 UTC, Meta wrote:
> On Friday, 11 May 2018 at 15:03:41 UTC, Uknown wrote:
>> [...]
>
> It's not as pretty, and I don't know if it works outside this 
> toy example yet, but you can do:
>
> import std.stdio;
>
> struct Allocator
> {
>     auto call(alias F, Args...)(Args args)
>     {
>         return F(this, args);
>     }
>
>     void deallocateAll()
>     {
>         writeln("deallocateAll");
>     }
> }
>
> void f1(Allocator a, int n) { writeln("f1"); }
> void f2(Allocator, string s, double d) { writeln("f2"); }
>
> void main()
> {
>     with (Allocator())
>     {
>         scope(exit) deallocateAll;
>         call!f1(2);
>         call!f2("asdf", 1.0);
>     }
> }

I found another alternative to this:

https://godbolt.org/g/3Etims


More information about the Digitalmars-d mailing list