[Issue 17713] Template 'this' parameters for static methods
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Thu Aug 3 06:53:46 PDT 2017
https://issues.dlang.org/show_bug.cgi?id=17713
er.krali at gmail.com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |er.krali at gmail.com
--- Comment #1 from er.krali at 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");
}
--
More information about the Digitalmars-d-bugs
mailing list