$ cat blah.d alias BS = BSA; alias BS = BSB; template BSA(alias T) { } template BSB(T) { } void foo() { void bar(alias composite)() { foreach (member; __traits(allMembers, composite)) enum a = __traits(compiles, __traits(getMember, composite, member)); } bar!blah; } segfaults in resolvePropertiesOnly, no idea why it would end up there. I initially thought it was to do with recursing on the same module, but it turns out that it still happens if you take foo to another module.
resolve properties is needed to check if we have a such a member. I'll have a look into this later.
works since 2.082 (https://run.dlang.io/is/xWNPg6)