https://issues.dlang.org/show_bug.cgi?id=17713
er.kr...@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |er.kr...@gmail.com --- Comment #1 from er.kr...@gmail.com --- I would add that they should really work pretty much everywhere in a class... i.e. all kind of templates: --- template isClass(T) { static if (is(T == class)) { enum isClass = true; } else { enum isClass = false; } } template Super(C) if (isClass!C) { import std.traits; import std.meta; static if (is(C == Object)) { alias Super = AliasSeq!(); } else { alias Parents = Filter!(isClass, BaseTypeTuple!C); static assert (Parents.length == 1); alias Super = Parents[0]; } } class A { public: enum desc = "class A"; template getDesc(this C) if (is(C == A)) { enum getDesc = A.desc; } template getDesc(this C) if (!is(C == A)) { enum getDesc = (Super!C).getDesc ~ " - " ~ C.desc; } } class B : A { enum desc = "class B"; } class C : B { enum desc = "class C"; } void main() { static assert(C.getDesc == "class A - class B - class C"); } --