https://issues.dlang.org/show_bug.cgi?id=20719
--- Comment #1 from Ben <[email protected]> --- Reduced test case: import std.meta : AliasSeq; import std.typecons : ReplaceTypeUnless; import std.traits : isCopyable, isAssignable; struct This; //defined in std.variant this way struct SumType(TypeArgs) { alias Types = AliasSeq!(ReplaceTypeUnless!(isSumType, This, typeof(this), TypeArgs)); union Storage { template memberName(T) { mixin("enum memberName = `values_", "`;"); } static foreach (T; Types) mixin("T ", memberName!T, ";"); } Storage storage; static foreach (T; Types) static if (isCopyable!T){} static foreach (T; Types) static if (isAssignable!T){} } enum isSumType(T) = is(Args); struct B { SumType!(This)elems; } --
