Strange error with templates and inheritance.
Robert Fraser
fraserofthenight at gmail.com
Sat Aug 4 11:22:49 PDT 2007
Frank Fischer Wrote:
> Hi,
>
> i'm currently developing a library and I heavily use templates and multiple
> inheritance (of interfaces, of course). The following inheritance structure
> is used (I removed all methods that are not important to show the error):
>
> ---
> module mytest;
>
> import std.stdio;
>
> interface A(T) {
> C!(T) func();
> size_t f();
> }
>
> abstract class B(T): A!(T) {
> }
>
> interface C(T): A!(T) {
> }
>
> class D: B!(int), C!(int) {
> size_t f() { return 42; }
> C!(int) func() { return this; }
> }
>
> void main() {
> A!(int) x = new D();
> writefln("%d", x.f());
> }
> ---
>
> When I compile this snippet with dmd 2.003 on my linux-box, I get a
> segmentation fault on the call "x.f()" in the last line. Furthermore, if I
> use an interface instead of an abstract class for B, everything is fine.
> Even if I just change the order of definition of 'func' and 'f' in A, i.e.
>
> interface A(T) {
> size_t f();
> C!(T) func();
> }
>
> everything works.
>
> Can anyone reproduce this error and/or explain it? In my library I
> can't/want to change B into an interface, because the class should contain
> some methods.
>
> Thanks,
> Frank
>
Sounds like a bug. You have your minimal code sample there, report it.
More information about the Digitalmars-d-learn
mailing list