I know why it doesn't compile but my reply would be identical to the compiler's 
error message. You need to define your destructor earlier, like so:
    
    
    when defined(gcDestructors):
      proc `=destroy`*(self: var typeof(Event()[])) =
        if not self.ignoreFinalizer and self.impl != nil:
          echo "gdk_event_unref(self.impl)"
          self.impl = nil
    
    template fnew*(a: untyped; finalizer: untyped) =
      when defined(gcDestructors):
        new(a)
      else:
        new(a, finalizer)
    
    proc `ref`*(self: Event): Event =
      fnew(result, generic_gdk_event_unref)
      echo "result.impl = gdk_event_ref(cast[ptr Event00](self.impl))"
    
    proc generic_gdk_event_unref*[T](self: ref T) =
      if not self.ignoreFinalizer:
        echo "gdk_event_unref(self.impl)"
    
    
    
    Run

Reply via email to