module ut.issues;


import ut;
import mirror.meta.reflection;
import mirror.meta.traits;
import std.meta: AliasSeq;


@("1")
@safe pure unittest {
    static import modules.issues;
    alias mod = Module!"modules.issues";
    // pragma(msg, mod.AllAggregates);
    shouldEqual!(
        mod.AllAggregates,
        AliasSeq!(
            modules.issues.Issue1,
            modules.issues.CtorProtectionsStruct,
            modules.issues.Issue9,
            modules.issues.Issue1.String,
        ),
    );
}


@("MemberFunctionsByOverload.class.templateAlias")
@safe @nogc pure unittest {

    static class Class {
        T default_(T)() { return T.init; }  // both this and the alias below
        alias defaultInt = default_!int;    // are needed to mimic a bug
    }

    alias fs = MemberFunctionsByOverload!Class;  // should compile
}


@("MemberFunctionsByOverloads.union")
@safe @nogc pure unittest {
    static union Union {
        int constant() @safe @nogc pure nothrow const { return 42; }
    }
    alias fs = MemberFunctionsByOverload!Union;
    static assert(fs.length == 1);
}