• 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
pybind11_cross_module_tests.cpp 3.55 KB