• Jason Rhinelander's avatar
    Made module_local types take precedence over global types · 4b159230
    Jason Rhinelander authored
    Attempting to mix py::module_local and non-module_local classes results
    in some unexpected/undesirable behaviour:
    
    - if a class is registered non-local by some other module, a later
      attempt to register it locally fails.  It doesn't need to: it is
      perfectly acceptable for the local registration to simply override
      the external global registration.
    - going the other way (i.e. module `A` registers a type `T` locally,
      then `B` registers the same type `T` globally) causes a more serious
      issue: `A.T`'s constructors no longer work because the `self` argument
      gets converted to a `B.T`, which then fails to resolve.
    
    Changing the cast precedence to prefer local over global fixes this and
    makes it work more consistently, regardless of module load order.
    4b159230
classes.rst 27.1 KB