As a best practice, methods returning a wrapped C object should always take an implicit wrapper, i.e.
def getFoo()(implicit w: CObjectWrapper[Foo]): Foo = extern
instead of
def getFoo(): Foo = extern
To help enforce this policy, it should be possible to activate warnings/errors if it is broken.