• Jason Rhinelander's avatar
    Implement py::init_alias<>() constructors · ec62d977
    Jason Rhinelander authored
    This commit adds support for forcing alias type initialization by
    defining constructors with `py::init_alias<arg1, arg2>()` instead of
    `py::init<arg1, arg2>()`.  Currently py::init<> only results in Alias
    initialization if the type is extended in python, or the given
    arguments can't be used to construct the base type, but can be used to
    construct the alias.  py::init_alias<>, in contrast, always invokes the
    constructor of the alias type.
    
    It looks like this was already the intention of
    `py::detail::init_alias`, which was forward-declared in
    86d825f3, but was apparently never
    finished: despite the existance of a .def method accepting it, the
    `detail::init_alias` class isn't actually defined anywhere.
    
    This commit completes the feature (or possibly repurposes it), allowing
    declaration of classes that will always initialize the trampoline which
    is (as I argued in #397) sometimes useful.
    ec62d977
test_alias_initialization.cpp 1.57 KB