• Dean Moldovan's avatar
    Make reference(_internal) the default return value policy for properties (#473) · 03f627eb
    Dean Moldovan authored
    * Make reference(_internal) the default return value policy for properties
    
    Before this, all `def_property*` functions used `automatic` as their
    default return value policy. This commit makes it so that:
    
     * Non-static properties use `reference_interal` by default, thus
       matching `def_readonly` and `def_readwrite`.
    
     * Static properties use `reference` by default, thus matching
       `def_readonly_static` and `def_readwrite_static`.
    
    In case `cpp_function` is passed to any `def_property*`, its policy will
    be used instead of any defaults. User-defined arguments in `extras`
    still have top priority and will override both the default policies and
    the ones from `cpp_function`.
    
    Resolves #436.
    
    * Almost always use return_value_policy::move for rvalues
    
    For functions which return rvalues or rvalue references, the only viable
    return value policies are `copy` and `move`. `reference(_internal)` and
    `take_ownership` would take the address of a temporary which is always
    an error.
    
    This commit prevents possible user errors by overriding the bad rvalue
    policies with `move`. Besides `move`, only `copy` is allowed, and only
    if it's explicitly selected by the user.
    
    This is also a necessary safety feature to support the new default
    return value policies for properties: `reference(_internal)`.
    03f627eb
test_methods_and_attributes.cpp 7.76 KB