aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gdc.test/compilable/test20894.d
blob: e8dad45a4017197e2193d684f17d341a60d6fdfc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// https://issues.dlang.org/show_bug.cgi?id=20894

mixin template MT()
{
    int   a;
    alias b = char;
    void  c() {}
}

struct S
{
    mixin MT mt;
}

void main()
{
    auto r = S();
    enum c = S();

    foo!(S.mt);
    foo!(r.mt);
    foo!(c.mt);          // OK <- ICE

    foo!(mixin("S.mt"));
    foo!(mixin("r.mt")); // OK <- ICE
    foo!(mixin("c.mt")); // OK <- ICE

    // some checks
    foo!(r.mt, c.mt);
    foo!(mixin("r.mt"), c.mt);
    foo!(r.mt, mixin("c.mt"));
    foo!(S.mt, mixin("c.mt"));
}

alias Tup(T...) = T;

void foo(A...)()
{
    static if (A.length == 2)
    {
        static assert(__traits(isSame, A[0], A[1]));
        enum members = __traits(allMembers, A[0]);
        static assert(members == __traits(allMembers, A[1]));
        static assert(members == Tup!("a", "b", "c"));
    }
}