This code: ------------------ import std.meta; void main() { func!(double, int, double); } void func(A...)() { static foreach(Type; A) {{ enum isType(T) = is(T == Type); alias filtered = Filter!(isType, A); pragma(msg, "Type: ", Type, " filtered: ", filtered); }} } ------------------ Should print: Type: double filtered: (double, double) Type: int filtered: (int) Type: double filtered: (double, double) However, it prints this instead: Type: double filtered: (double, double) Type: int filtered: (double, double) Type: double filtered: (double, double) This is especially egregious since not using a double brace causes the compiler to complain that `isType` has already been defined. The double braces make the error go away but only the first implementation is used.
Current master prints: Type: double filtered: (double, double) Type: int filtered: (int) Type: double filtered: (double, double)