On Saturday, 22 December 2018 at 10:11:23 UTC, bauss wrote:
On Saturday, 22 December 2018 at 03:44:09 UTC, Timoses wrote:

Awesome hack!
Being a hack, it would be even nicer if it worked ouf of the box:

    mixin template foo(bool b)
    {
        int _impl() { writeln(b); return int.init; }
        int _ipml2 = _impl();
    }

vs

    mixin template foo(bool b)
    {
        writeln(b);
    }

I think this is the closest we can come to it:

mixin template Execute(alias p)
{
    auto __execute__()
    {
        p();

        return 0;
    }
    auto __unused__ = __execute__();
}

mixin template MyTemplate(int a)
{
    mixin Execute!({
        import std.stdio : writeln;
        writeln(a);
    });
}

void main()
{
    mixin MyTemplate!10;
}

One more line can be saved using a lambda to wrap the alias:

    template ExpressionStatement(alias p)
    {
        const __unused__ = {p(); return 0;}();
    }

Also i prefer the name `ExpressionStatement` to `Execute` because this describes exactly what the template does and define its limits at the same time.

And congrats to Neia Neutuladh for this find.

Reply via email to