* When determining if a shared_ptr already exists, use a test on the weak_ptr instead of a try/catch block.
* When determining if a shared_ptr already exists, use a test on the weak_ptr instead of a try/catch block.
* weak_from_this is only available in C++17 and later
* Switch to use feature flag instead of C++ version flag.
* Add Microsoft-specific check.
* Avoid undefined preprocessor macro warning treated as error.
* Simplify shared_from_this in init_holder
* Include <version> in detail/common.h (~stolen~ borrowed from @bstaletic's #2816)
* Move class_::get_shared_from_this to detail::try_get_shared_from_this
* Simplify try_get_shared_from_this by using weak_ptr::lock()
Co-authored-by: Yannick Jadoul <yannick.jadoul@belgacom.net>
* Plug leaking function_record objects when exceptions are thrown
* Plug leak of strdup'ed strings in function_record
* Some extra comments about the function_record ownership dance
* Clean up the function_record better, in case of exceptions
* Demonstrate some extra function_record leaks
* Change DeleteStrings template argument to free_strings runtime argument in destruct(function_record *)
* Zero-state unique_function_record deleter object
* Clarify rvalue reference to unique_ptr parameter in initialize_generic
* Use push_back with const char * instead of emplace_back
* Fix a clang warning from [-Wshadow-field-in-constructor-modified]
warning: modifying constructor parameter 'flag' that shadows a field of 'set_flag' [-Wshadow-field-in-constructor-modified]
* Change name based on review
* Avoid thread termination in scoped_released
Do not call `PyEval_RestoreThread()` from `~gil_scoped_release()` if python runtime is finalizing, as it will result in thread termination in Python runtime newer than 3.6, as documented in https://docs.python.org/3/c-api/init.html#c.PyEval_RestoreThread
Similarly do not call `PyThreadState_DeleteCurrent` from `~gil_scoped_acquire()` if runtime is finalizing.
Discovered while debugging PyTorch crash using Python-3.9 described in https://github.com/pytorch/pytorch/issues/47776
* Simplify _Py_IsFinalizing() availability check
* Fix typo
* Add version agnostic `detail::finalization_guard()`
* Move `finalization_guard` to detail/common.h
And rename it to `is_finalizing`
* Move `is_finalizing()` back to pybind11.h
* Simplify `is_finalizing()` check
One should follow documentation rather than make any assumptions
* feat: disarm
* docs: fix comment
Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
This line had two bugs:
1. It declares `py::detail::class_` as `friend`.
2. After fixing that, we would have to change it to
`template <typename, typename...>`
The first one was introduced ~5 years ago, when a large refactoring was
made, probably as an intermediate step during refactoring.
The second was made when `generic_type` was made to be agnostic with
respect to the order of `py::class_` template parameters.
We're removing the declaration altogether, because it was never relied
on. This is what makes me think that it was an intermediate step in
refactoring that shouldn't have ended up in commit history.
* demo kwarg with none(false)
* Reorder and extend tests for arg::none(false) in test_methods_and_attributes.py::test_accepts_none
* Fix arg::none() for keyword arguments
* Add changelog note
* Fix names of no_none_kw test functions
Co-authored-by: Yannick Jadoul <yannick.jadoul@belgacom.net>
* add support for LLVM compiler
* Update include/pybind11/pybind11.h
__forced_unwind libc++ vs libstdc++
Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
* Deprecated public constructors of module
* Turn documentation comment of module_::add_object into valid doxygen documentation
* Move definition of PYBIND11_DETAIL_MODULE_STATIC_DEF and PYBIND11_DETAIL_MODULE_CREATE macros up
* Move detail::create_top_level_module to module_::create_extension_module, and unify Python 2 and 3 signature again
* Throw error_already_set if module creation fails in module_::create_extension_module
* Mention module_::create_extension_module in deprecation warning message of module_::module_
* Check scope's __dict__ instead of using hasattr when registering classes and exceptions, to allow registering the same name in a derived class scope
* Extend test_base_and_derived_nested_scope test
* Add tests on error being thrown registering duplicate classes
* Circumvent bug with combination of test_class.py::test_register_duplicate_class and test_factory_constructors.py::test_init_factory_alias
* Initializing PyModuleDef object with PyModuleDef_HEAD_INIT.
Python 3.8 documentation: m_base - Always initialize this member to PyModuleDef_HEAD_INIT.
Long-standing (since first github commit in 2015), inconsequential bug.
Also removing inconsequential Py_INCREF(def): PyModule_Create() resets the reference count to 1.
* git rebase master
* moving static PyModuleDef declaration to global scope, as requested by @wjakob
* renaming the two new macros, to start with PYBIND11_DETAIL_MODULE
This changes enum reprs to look like `<Enum.name: value>` similarly to
the Python enum module.
This keeps the str of enums as `Enum.name`, like the Python enum module.
Support C++20. For backwards compatibility, we provide an alias for the old name.
This change is necessary to easily avoid errors when a compiler thinks
`module` is used as a keyword.
* Change base parameter type in register_exception and excepion constructor from PyObject* to handle
* Fix compilation error passing `handle` to `PyObject*`
* Wrap PYBIND11_OVERLOAD_NAME and PYBIND11_OVERLOAD_PURE_NAME in do { ... } while (false), and resolve trailing semicolon
* Deprecate PYBIND11_OVERLOAD_* and get_overload in favor of PYBIND11_OVERRIDE_* and get_override
* Correct erroneous usage of 'overload' instead of 'override' in the implementation and internals
* Fix tests to use non-deprecated PYBIND11_OVERRIDE_* macros
* Update docs to use override instead of overload where appropriate, and add warning about deprecated aliases
* Add semicolons to deprecated PYBIND11_OVERLOAD macros to match original behavior
* Remove deprecation of PYBIND11_OVERLOAD_* macros and get_overload
* Add note to changelog and upgrade guide
If the default argument value is a class, and not an instance of a
class, `a.value.attr("__repr__")` raises a `ValueError`. Switching to
`repr(a.value)` makes this use case work.
Fixes#2028
* Change NAMESPACE_BEGIN and NAMESPACE_END macros into PYBIND11_NAMESPACE_BEGIN and PYBIND11_NAMESPACE_END
* Fix sudden HomeBrew 'python not installed' error
* Sweep difference in 'Class.__init__() must be called when overriding __init__' error message between CPython and PyPy under the rug
* Homebrew updated to 3.8 yesterday.
Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>