| // 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")); |
| } |
| } |