[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