On Friday, 4 April 2014 at 09:22:16 UTC, Atila Neves wrote:
    enum hasAccept(T) = is(typeof(() {
        auto s = T();
        auto foo = FooVisitor();
        s.accept(foo);
        auto bar = BarVisitor();
        s.accept(bar);
    }));

I have lately started to favor separated asserts as opposed to combined constraints:

mixin template hasAccept(T)
{
    static assert (
        is(typeof(() { auto s = T(); })),
        "Can't create instance of " ~ T.stringof
    );
    static assert (
        is(typeof(FooVisitor)),
        "FooVisitor is not defined"
    );

    // .. and so on
}

It is much less elegant and does not fix issue fundamentally but speeds up debugging for end user of the library quite a lot.

Reply via email to