Given the code: --------------- template SomeStruct(Type) { static if(is(Type == struct) || is(Type == class) || is(Type == interface)) enum StaticStruct = true; else enum StaticStruct = false; } --------------- I suggest a syntax sugar for template functions: --------------- void f(SomeStruct s) { } --------------- be transformed into: --------------- void f(Type_0_)(Type_0_ s) if(SomeStruct!Type_0_) { } --------------- IF the given type isn't a valid type, it'll search for a template, that takes a single type and evaluates to a bool and transform the function if the type name is such a template. this would greatly increase the readability of generic functions and allow to avoid creating enormous template constraints, as well as provide a better diagnostics, like "the type T is not a SomeStruct" or something like that.
The proposed code compiles as of v2.065.