www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Contracts for interfaces and abstract classes

reply "Mike L." <mike.linford.reg gmail.com> writes:
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 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(runM
duleUnitTests+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?
Aug 19 2012
parent "Mike L." <mike.linford.reg gmail.com> writes:
Sorry, the title of the thread might be irrelevant, it's just 
that I was playing around with contracts when I noticed the 
problem.
Aug 20 2012