mixin templates and classes
Denis Shelomovskij
verylonglogin.reg at gmail.com
Fri May 4 06:30:52 PDT 2012
IMHO this should compile:
---
mixin template T() { final void f() { } }
class A { mixin T ta; }
class B : A { mixin T tb; }
---
these asserts should pass:
---
mixin template T(string s) {
string f() { return s; }
}
class A {
mixin T!"T1" ta1;
mixin T!"T2" ta2;
mixin T!"T";
}
class B : A {
override string f() { return "B"; }
}
void main() {
assert((new B).f() == "B");
assert((new B).ta1.f() == "T1"); // Fails: ta1.f() = "B"
assert((new B).ta2.f() == "T2");
// Doesn't compile because of Issue 8033
// Will fail once will compile: (new A).f() = "T"
// assert((new A).f() == "B");
}
---
and this should not compile (Issue 8034):
---
mixin template T(string s) {
string f() { return s; }
}
class A {
mixin T!"T1" ta1;
mixin T!"T2" ta2;
}
class B : A {
override string f() { return "B"; }
}
---
And I see one easy way to improve the situation: disallow named template
mixins to override/add virtual methods except a destructor.
Thoughts?
--
Денис В. Шеломовский
Denis V. Shelomovskij
More information about the Digitalmars-d
mailing list