This works
    
    
    type
      SNodeAny = ref object of RootObj
      SNode[T] = ref object of SNodeAny
      DNode[T] = ref object
    
    method newDNode(s: SNodeAny) {.base.} =
      echo "newDNode base"
    
    method newDNode[T](s: SNode[T]) =
      echo "newDNode generic"
    
    method getStr(s: SNode[float]): string {.base.} = "blahblah"
    
    let s = SNodeAny(SNode[float]())
    newDnode(s)
    
    
    Run

why? The instantiation `SNode[float]` is cached and by that time there are no 
methods attached to `SNode` yet. Then the cache is consulted and the 
instantation of `method newDNode[T](s: SNode[T])` is skipped. Multi methods and 
generics are broken beyond repair IMO.

Reply via email to