On Friday, 12 May 2017 at 00:20:13 UTC, سليمان السهمي (Soulaïman Sahmi) wrote:
Is there a rational behind not allowing statements inside mixin templates? I know mixin does accept code containing statements, but using mixin is much uglier. so I was wondering.

example use case:
//---------------------------------
int compute(string)
{
    return 1;
}

mixin template testBoilerPlate(alias arg, alias expected)
{
    {
        import std.format : format;
        auto got = compute(arg);
assert(got == expected, "expected %s got %s".format(expected, got));
    }
}

unittest
{
    mixin testBoilerPlate("12345", 1);
    mixin testBoilerPlate("00" ~ "0", 2 - 1);
}
//--------------------------------

If you can put up with the limitation of what can be done in a nested function then this convention works (choose whatever names you want, A and __ are just for example):

mixin template A()
{
        auto __()
        {
                ++a;
        }
}

void main()
{
        int a = 0;

        mixin A!() __; __.__;

        assert (a == 1);
}

Reply via email to