Contracts for interfaces and abstract classes

Mike L. mike.linford.reg at gmail.com
Sun Aug 19 23:54:16 PDT 2012


I'm on ubuntu x64 using dmd 2.060 and the following gives an 
exception:

rdmd --main -unittest -version=useInterface mml/sets.d

while the following runs just fine:

rdmd --main -unittest -version=useAbstractClass mml/sets.d

The exception is:

object.Exception at src/object_.d(108): need opCmp for class 
mml.sets.ArraySet!(int).ArraySet
----------------
/tmp/.rdmd-1000/rdmd-sets.d-6930C9CC42761331FC9D9AEC14A3F32C/sets(bool 
mml.sets.Set!(int).Set.add(const(int)).void __ensure(ref 
const(bool))+0x15) [0x416b25]
/tmp/.rdmd-1000/rdmd-sets.d-6930C9CC42761331FC9D9AEC14A3F32C/sets(bool 
mml.sets.ArraySet!(int).ArraySet.add(const(int))+0xae) [0x416c6e]
/tmp/.rdmd-1000/rdmd-sets.d-6930C9CC42761331FC9D9AEC14A3F32C/sets(void 
mml.sets.__unittest1()+0x30) [0x416aac]
/tmp/.rdmd-1000/rdmd-sets.d-6930C9CC42761331FC9D9AEC14A3F32C/sets(void 
mml.sets.__modtest()+0x9) [0x417051]
/tmp/.rdmd-1000/rdmd-sets.d-6930C9CC42761331FC9D9AEC14A3F32C/sets(extern 
(C) bool core.runtime.runModuleUnitTests().int 
__foreachbody314(ref object.ModuleInfo*)+0x30) [0x41bc5c]
/tmp/.rdmd-1000/rdmd-sets.d-6930C9CC42761331FC9D9AEC14A3F32C/sets(int 
rt.minfo.moduleinfos_apply(scope int delegate(ref 
object.ModuleInfo*))+0x55) [0x41a119]
/tmp/.rdmd-1000/rdmd-sets.d-6930C9CC42761331FC9D9AEC14A3F32C/sets(runModuleUnitTests+0xae) 
[0x41bb22]
/tmp/.rdmd-1000/rdmd-sets.d-6930C9CC42761331FC9D9AEC14A3F32C/sets(extern 
(C) int rt.dmain2.main(int, char**).void runAll()+0x22) [0x418f5e]
/tmp/.rdmd-1000/rdmd-sets.d-6930C9CC42761331FC9D9AEC14A3F32C/sets(extern 
(C) int rt.dmain2.main(int, char**).void tryExec(scope void 
delegate())+0x2a) [0x4188aa]
/tmp/.rdmd-1000/rdmd-sets.d-6930C9CC42761331FC9D9AEC14A3F32C/sets(main+0xd1) 
[0x418835]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) 
[0x7fc94ce5276d]

see link for mml/sets.d: http://codepad.org/A9B6WeJH

Why should the fact that I used an interface cause 
Object.opCmp(Object o) to be called?


More information about the Digitalmars-d-learn mailing list