| mixin template Constructors(){ |
| this(){ } |
| this()immutable{ } |
| this()shared{ } |
| } |
| |
| class A { |
| public: |
| static T getInstance(this T)() { |
| return new T(); |
| } |
| private: |
| mixin Constructors; |
| } |
| |
| class B : A { |
| private: |
| mixin Constructors; |
| } |
| |
| void f(){ |
| auto a = (new A).getInstance; |
| auto b = (new B).getInstance; |
| static assert(is(typeof(a) == A)); |
| static assert(is(typeof(b) == B)); |
| |
| auto ca = (new immutable A).getInstance; |
| auto sb = (new shared B).getInstance; |
| static assert(is(typeof(ca) == immutable A)); |
| static assert(is(typeof(sb) == shared B)); |
| } |
| |
| // https://issues.dlang.org/show_bug.cgi?id=10488 |
| version(none) |
| void g(){ |
| auto a = A.getInstance(); |
| auto b = B.getInstance(); |
| static assert(is(typeof(a)==A)); |
| static assert(is(typeof(b)==B)); |
| |
| auto ai = (immutable(A)).getInstance(); |
| auto bs = (shared(B)).getInstance(); |
| static assert(is(typeof(ai)==immutable(A))); |
| static assert(is(typeof(bs)==shared(B))); |
| } |