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.