[Issue 1692] New: Abstract class dynamic creation bug

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Nov 24 09:38:40 PST 2007


http://d.puremagic.com/issues/show_bug.cgi?id=1692

           Summary: Abstract class dynamic creation bug
           Product: D
           Version: 1.023
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: major
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla at digitalmars.com
        ReportedBy: jaroslav.kroft at seznam.cz


Hi, 
here is some piece of code which most probably doesn't work one expect to.

version (Tango) {
  import tango.io.Console;
  pragma(lib, "tango-user-dmd");
} else {
  import std.stdio;
}

class AbstractError: Error {
  this (char[] msg = null) {
    super(msg);
  }
}

abstract class Dummy {
  public {
    this() {
      if (!this) {
        throw new AbstractError();
      }
    }
  }

  char[] Value();
}

int main(char[][] args)
{
  ClassInfo ci = ClassInfo.find("hello.Dummy");
  if (ci) {
    Object o = ci.create();
    if (o) {
version (Tango) {
      Cout(o.toUtf8);
} else {
  writef(o.toString);
}
    }
  }
  return 0;
}

This code would compile without any error, but when you try to run, you will
receive AV most probably directly in the constructor. I guess that in this case
the call of ClassInfo.create should either return null or throw some kind of
error....


-- 



More information about the Digitalmars-d-bugs mailing list