diff --git a/.github/labeler.yml b/.github/labeler.yml
index e5a8de751..050933934 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -2,7 +2,7 @@ docs:
all:
- changed-files:
- all-globs-to-all-files:
- - '!docs/changelog.rst'
+ - '!docs/changelog.md'
- '!docs/upgrade.rst'
- base-branch: "^(?!dependabot).*"
- base-branch: "^(?!pre-commit-ci).*"
diff --git a/.github/labeler_merged.yml b/.github/labeler_merged.yml
index cf6c1f293..479530d85 100644
--- a/.github/labeler_merged.yml
+++ b/.github/labeler_merged.yml
@@ -3,6 +3,6 @@
needs changelog:
- all:
- changed-files:
- - all-globs-to-all-files: "!docs/changelog.rst"
+ - all-globs-to-all-files: "!docs/changelog.md"
- base-branch: "^(?!dependabot).*"
- base-branch: "^(?!pre-commit-ci).*"
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 54b7f5100..34c98633c 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -9,11 +9,7 @@ It is recommended to use conventional commit format, see conventionalcommits.org
## Suggested changelog entry:
-
+
-```rst
-
-```
-
-
+* Placeholder.
diff --git a/docs/changelog.md b/docs/changelog.md
new file mode 100644
index 000000000..365f97f9a
--- /dev/null
+++ b/docs/changelog.md
@@ -0,0 +1,3070 @@
+# Changelog
+
+
+
+Starting with version 1.8.0, pybind11 releases use a [semantic
+versioning](http://semver.org) policy.
+
+Changes will be added here periodically from the "Suggested changelog
+entry" block in pull request descriptions.
+
+## 3.0.0 RC 1
+
+We may add one more opt-in feature (embedded subinterperters) before the
+final release.
+
+New Features:
+
+- The `smart-holder` branch has been merged, enabling
+ `py::class_`, which handles two-way conversion
+ with `std::unique_ptr` and `std::shared_ptr` (simultaneously),
+ disowning a Python object being passed to `std::unique_ptr`,
+ trampoline objects, and `std::enable_shared_from_this`.
+ [#5542](https://github.com/pybind/pybind11/pull/5542)
+
+- Changed `PYBIND11_MODULE` macro implementation to perform multi-phase
+ module initialization (PEP 489) behind the scenes.
+ [#5574](https://github.com/pybind/pybind11/pull/5574)
+
+- Support for sub-interpreters (both isolated (with separate GILs) and
+ legacy (with a global GIL). Add the
+ `py::multiple_interpreters::per_interpreter_gil()` tag (or,
+ `py::multiple_interpreters::shared_gil()` for legacy interpreter
+ support) to `PYBIND11_MODULE` calls (as the third parameter) to
+ indicate that a module supports running with sub-interpreters.
+ [#5564](https://github.com/pybind/pybind11/pull/5564)
+
+- Changed `PYBIND11_EMBEDDED_MODULE` macro implementation to perform
+ multi-phase module initialization (PEP 489) behind the scenes and to
+ support `py::mod_gil_not_used()`,
+ `py::multiple_interpreters::per_interpreter_gil()` and
+ `py::multiple_interpreters::shared_gil()`.
+ [#5665](https://github.com/pybind/pybind11/pull/5665)
+
+- `py::native_enum` was added, for conversions between Python's native
+ (stdlib) enum types and C++ enums.
+ [#5555](https://github.com/pybind/pybind11/pull/5555)
+
+ - Add class doc string to `py::native_enum`.
+ [#5617](https://github.com/pybind/pybind11/pull/5617).
+
+ - Fix signature for functions with a native_enum in the signature.
+ [#5619](https://github.com/pybind/pybind11/pull/5619)
+
+- A `py::release_gil_before_calling_cpp_dtor` option (for `py::class_`)
+ was added to resolve the long-standing issue \#1446.
+ [#5522](https://github.com/pybind/pybind11/pull/5522)
+
+- Add `dtype::normalized_num` and `dtype::num_of`.
+ [#5429](https://github.com/pybind/pybind11/pull/5429)
+
+- Add support for `array_t` and `array_t`.
+ [#5427](https://github.com/pybind/pybind11/pull/5427)
+
+- Added `py::warnings` namespace with `py::warnings::warn` and
+ `py::warnings::new_warning_type` that provides the interface for
+ Python warnings.
+ [#5291](https://github.com/pybind/pybind11/pull/5291)
+
+- stl.h `list|set|map_caster` were made more user friendly: it is no
+ longer necessary to explicitly convert Python iterables to `tuple()`,
+ `set()`, or `map()` in many common situations.
+ [#4686](https://github.com/pybind/pybind11/pull/4686)
+
+- The `array_caster` in pybind11/stl.h was enhanced to support value
+ types that are not default-constructible.
+ [#5305](https://github.com/pybind/pybind11/pull/5305)
+
+- `pybind11/conduit/pybind11_platform_abi_id.h` was factored out, to
+ maximize reusability of `PYBIND11_PLATFORM_ABI_ID` (for other
+ Python/C++ binding systems).
+ [#5375](https://github.com/pybind/pybind11/pull/5375)
+
+- Added support for finding pybind11 using pkgconf distributed on pypi.
+ [#5552](https://github.com/pybind/pybind11/pull/5552)
+
+- Support `--extension-suffix` on the pybind11 command.
+ [#5360](https://github.com/pybind/pybind11/pull/5360)
+
+- Add semi-public API: `pybind11::detail::is_holder_constructed` and
+ update example for `pybind11::custom_type_setup` in documentation.
+ [#5669](https://github.com/pybind/pybind11/pull/5669)
+
+New Features (typing):
+
+- Added option for different arg/return type hints to `type_caster`.
+ Updated `stl/filesystem` to use correct arg/return type hints. Updated
+ `pybind11::typing` to use correct arg/return type hints for nested
+ types. [#5450](https://github.com/pybind/pybind11/pull/5450)
+- Updated type hint for `py::capsule` to `type.CapsuleType`.
+ [#5567](https://github.com/pybind/pybind11/pull/5567)
+- Adds support for `typing.SupportsInt` and `typing.SupportsFloat`.
+ Update `Final` to be narrower type hint. Make `std::function` match
+ `Callable` type. Fix `io_name` bug in `attr_with_type_hint`.
+ [#5540](https://github.com/pybind/pybind11/pull/5540)
+- Rework of arg/return type hints to support `.noconvert()`.
+ [#5486](https://github.com/pybind/pybind11/pull/5486)
+- Add `attr_with_type` for declaring attribute types and `Final`,
+ `ClassVar` type annotations.
+ [#5460](https://github.com/pybind/pybind11/pull/5460)
+- Allow annotate methods with `py::pos_only` when only have the `self`
+ argument. Make arguments for auto-generated dunder methods
+ positional-only.
+ [#5403](https://github.com/pybind/pybind11/pull/5403)
+- Added `py::Args` and `py::KWArgs` to enable custom type hinting of
+ `*args` and `**kwargs` (see PEP 484).
+ [#5357](https://github.com/pybind/pybind11/pull/5357)
+- Switched to `numpy.typing.NDArray` and `numpy.typing.ArrayLike`.
+ [#5212](https://github.com/pybind/pybind11/pull/5212)
+
+
+
+- Use `numpy.object_` instead of `object`.
+ [#5571](https://github.com/pybind/pybind11/pull/5571)
+- Fix module type hint.
+ [#5469](https://github.com/pybind/pybind11/pull/5469)
+- Fix Buffer type hint.
+ [#5662](https://github.com/pybind/pybind11/pull/5662)
+- Added support for `collections.abc` in type hints and convertible
+ checks of STL casters and `py::buffer`.
+ [#5566](https://github.com/pybind/pybind11/pull/5566)
+
+Removals:
+
+- Remove support for pybind11 v2 internals versions (4, 5, 6). (The
+ internals version number has been bumped for pybind11 v3.)
+ [#5512](https://github.com/pybind/pybind11/pull/5512) \|
+ [#5530](https://github.com/pybind/pybind11/pull/5530)
+- Remove `make_simple_namespace` (added in 2.8.0, deprecated in 2.8.1).
+ [#5597](https://github.com/pybind/pybind11/pull/5597)
+- Legacy-mode option `PYBIND11_NUMPY_1_ONLY` has been removed.
+ [#5595](https://github.com/pybind/pybind11/pull/5595)
+- Add a deprecation warning to `.get_type` (deprecated in pybind11 2.6
+ in 2020). [#5596](https://github.com/pybind/pybind11/pull/5596)
+
+Bug fixes:
+
+- Set `__file__` on submodules.
+ [#5584](https://github.com/pybind/pybind11/pull/5584). Except on
+ embedded modules.
+ [#5650](https://github.com/pybind/pybind11/pull/5650)
+- pybind11-bound functions are now pickleable.
+ [#5580](https://github.com/pybind/pybind11/pull/5580)
+- Fix bug in `attr_with_type_hint` to allow objects to be in
+ `attr_with_type_hint`.
+ [#5576](https://github.com/pybind/pybind11/pull/5576)
+- A `-Wmaybe-uninitialized` warning suppression was added in
+ `pybind11/eigen/matrix.h`.
+ [#5516](https://github.com/pybind/pybind11/pull/5516)
+- `PYBIND11_WARNING_POP` was incorrectly defined as
+ `PYBIND11_PRAGMA(clang diagnostic push)`.
+ [#5448](https://github.com/pybind/pybind11/pull/5448)
+- `PYBIND11_PLATFORM_ABI_ID` (which is used in composing
+ `PYBIND11_INTERNALS_ID`) was modernized to reflect actual ABI
+ compatibility more accurately.
+ [#4953](https://github.com/pybind/pybind11/pull/4953) \|
+ [#5439](https://github.com/pybind/pybind11/pull/5439)
+- Fix buffer protocol implementation.
+ [#5407](https://github.com/pybind/pybind11/pull/5407)
+- Fix iterator increment operator does not skip first item.
+ [#5400](https://github.com/pybind/pybind11/pull/5400)
+- When getting or deleting an element in a container bound by
+ `bind_map`, print the key in `KeyError` if it does not exist.
+ [#5397](https://github.com/pybind/pybind11/pull/5397)
+- `pybind11::builtin_exception` is now explicitly exported when linked
+ to libc++. [#5390](https://github.com/pybind/pybind11/pull/5390)
+- Allow subclasses of `py::args` and `py::kwargs`.
+ [#5381](https://github.com/pybind/pybind11/pull/5381)
+- Disable false-positive GCC 12 Bound Check warning.
+ [#5355](https://github.com/pybind/pybind11/pull/5355)
+- fix: using `__cpp_nontype_template_args` instead of
+ `__cpp_nontype_template_parameter_class`.
+ [#5330](https://github.com/pybind/pybind11/pull/5330)
+- Properly translate C++ exception to Python exception when creating
+ Python buffer from wrapped object.
+ [#5324](https://github.com/pybind/pybind11/pull/5324)
+- Update the dict when restoring pickles, instead of assigning a
+ replacement dict.
+ [#5658](https://github.com/pybind/pybind11/pull/5658)
+- Properly define `_DEBUG` macro to `1` instead of defining it without
+ value. [#5639](https://github.com/pybind/pybind11/pull/5639)
+- Fix a missing time cast causing a compile error for newer ICC.
+ [#5621](https://github.com/pybind/pybind11/pull/5621)
+- Change the behavior of the default constructor of `py::slice` to be
+ equivalent to `::` in Python.
+ [#5620](https://github.com/pybind/pybind11/pull/5620)
+
+Bug fixes (CMake):
+
+- (CMake) Enable FindPython mode by default, with a `COMPAT` mode that
+ sets some of the old variables to ease transition.
+ [#5553](https://github.com/pybind/pybind11/pull/5553)
+- Add an author warning that auto-calculated `PYTHON_MODULE_EXTENSION`
+ may not respect `SETUPTOOLS_EXT_SUFFIX` during cross-compilation.
+ [#5495](https://github.com/pybind/pybind11/pull/5495)
+- Don't strip with `CMAKE_BUILD_TYPE` None.
+ [#5392](https://github.com/pybind/pybind11/pull/5392)
+- Fix an issue with `NO_EXTRAS` adding `pybind11::windows_extras`
+ anyway. [#5378](https://github.com/pybind/pybind11/pull/5378)
+- Fix issue with NEW/OLD message showing up.
+ [#5656](https://github.com/pybind/pybind11/pull/5656)
+- Use CMake's warnings as errors if available (CMake 3.24+).
+ [#5612](https://github.com/pybind/pybind11/pull/5612)
+- Add support for running pybind11's tests via presets in CMake 3.25+.
+ [#5655](https://github.com/pybind/pybind11/pull/5655)
+- Restructure venv support to support `--fresh`, make in build folder.
+ [#5668](https://github.com/pybind/pybind11/pull/5668)
+
+Bug fixes (free-threading):
+
+- Fix data race in free threaded CPython when accessing a shared static
+ variable. [#5494](https://github.com/pybind/pybind11/pull/5494)
+- A free-threading data race in `all_type_info()` was fixed.
+ [#5419](https://github.com/pybind/pybind11/pull/5419)
+- Added exception translator specific mutex used with
+ `try_translate_exceptions` in the free-threaded build for internal
+ locking. [#5362](https://github.com/pybind/pybind11/pull/5362)
+
+Internals:
+
+- Consolidated all `PYBIND11_HAS_...` feature macros into
+ `pybind11/detail/common.h` to streamline backward compatibility checks and
+ simplify internal refactoring. This change ensures consistent macro
+ availability regardless of header inclusion order.
+ [#5647](https://github.com/pybind/pybind11/pull/5647)
+
+- `pybind11/gil_simple.h` was factored out from `pybind11/gil.h`, so
+ that it can easily be reused.
+ [#5614](https://github.com/pybind/pybind11/pull/5614)
+
+Documentation:
+
+- Improved `reference_internal` policy documentation.
+ [#5528](https://github.com/pybind/pybind11/pull/5528)
+- A new "Double locking, deadlocking, GIL" document was added.
+ [#5394](https://github.com/pybind/pybind11/pull/5394)
+- Adds an answer (FAQ) for "What is a highly conclusive and simple way
+ to find memory leaks?".
+ [#5340](https://github.com/pybind/pybind11/pull/5340)
+- Add documenting for free-threading and subinterpreters.
+ [#5659](https://github.com/pybind/pybind11/pull/5659)
+
+Tests:
+
+- Download the final Catch2 2.x release if Catch download is requested.
+ [#5568](https://github.com/pybind/pybind11/pull/5568)
+
+- Explicitly used `signed char` for two numpy dtype tests. As seen when
+ compiling using `clang` on Linux with the `-funsigned-char` flag.
+ [#5545](https://github.com/pybind/pybind11/pull/5545)
+
+- Test PyPy3.11 in CI.
+ [#5534](https://github.com/pybind/pybind11/pull/5534)
+- CI testing now includes
+ `-Wwrite-strings -Wunreachable-code -Wpointer-arith -Wredundant-decls`
+ in some jobs. [#5523](https://github.com/pybind/pybind11/pull/5523)
+
+New and removed platforms:
+
+- Support Python 3.14 (beta 1).
+ [#5646](https://github.com/pybind/pybind11/pull/5646)
+- Added support for GraalPy Python implementation
+ ().
+ [#5380](https://github.com/pybind/pybind11/pull/5380)
+- Support for PyPy 3.11 added.
+ [#5508](https://github.com/pybind/pybind11/pull/5508)
+- Support for PyPy 3.8 and 3.9 was dropped.
+ [#5578](https://github.com/pybind/pybind11/pull/5578)
+- Support for Python 3.7 was removed. (Official end-of-life:
+ 2023-06-27). [#5191](https://github.com/pybind/pybind11/pull/5191)
+- Support for CMake older than 3.15 removed. CMake 3.15-4.0 supported.
+ [#5304](https://github.com/pybind/pybind11/pull/5304)
+- Use scikit-build-core for the build backend for the PyPI `pybind11`.
+ The CMake generation has been moved to the sdist-\>wheel step.
+ `PYBIND11_GLOBAL_PREFIX` has been removed.
+ [#5598](https://github.com/pybind/pybind11/pull/5598)
+
+## Version 2.13.6 (September 13, 2024)
+
+New Features:
+
+- A new `self._pybind11_conduit_v1_()` method is automatically added to
+ all `py::class_`-wrapped types, to enable type-safe interoperability
+ between different independent Python/C++ bindings systems, including
+ pybind11 versions with different `PYBIND11_INTERNALS_VERSION`'s.
+ Supported on pybind11 2.11.2, 2.12.1, and 2.13.6+.
+ [#5296](https://github.com/pybind/pybind11/pull/5296)
+
+Bug fixes:
+
+- Using `__cpp_nontype_template_args` instead of
+ `__cpp_nontype_template_parameter_class`.
+ [#5330](https://github.com/pybind/pybind11/pull/5330)
+- Properly translate C++ exception to Python exception when creating
+ Python buffer from wrapped object.
+ [#5324](https://github.com/pybind/pybind11/pull/5324)
+
+Documentation:
+
+- Adds an answer (FAQ) for "What is a highly conclusive and simple way
+ to find memory leaks?".
+ [#5340](https://github.com/pybind/pybind11/pull/5340)
+
+## Version 2.13.5 (August 22, 2024)
+
+Bug fixes:
+
+- Fix includes when using Windows long paths (`\\?\` prefix).
+ [#5321](https://github.com/pybind/pybind11/pull/5321)
+- Support `-Wpedantic` in C++20 mode.
+ [#5322](https://github.com/pybind/pybind11/pull/5322)
+- Fix and test `` support for `py::tuple` and `py::list`.
+ [#5314](https://github.com/pybind/pybind11/pull/5314)
+
+## Version 2.13.4 (August 14, 2024)
+
+Bug fixes:
+
+- Fix paths with spaces, including on Windows. (Replaces regression from
+ [#5302](https://github.com/pybind/pybind11/pull/5302))
+ [#4874](https://github.com/pybind/pybind11/pull/4874)
+
+Documentation:
+
+- Remove repetitive words.
+ [#5308](https://github.com/pybind/pybind11/pull/5308)
+
+## Version 2.13.3 (August 13, 2024)
+
+Bug fixes:
+
+- Quote paths from pybind11-config
+ [#5302](https://github.com/pybind/pybind11/pull/5302)
+- Fix typo in Emscripten support when in config mode (CMake)
+ [#5301](https://github.com/pybind/pybind11/pull/5301)
+
+## Version 2.13.2 (August 13, 2024)
+
+New Features:
+
+- A `pybind11::detail::type_caster_std_function_specializations` feature
+ was added, to support specializations for `std::function`'s with
+ return types that require custom to-Python conversion behavior (to
+ primary use case is to catch and convert exceptions).
+ [#4597](https://github.com/pybind/pybind11/pull/4597)
+
+Changes:
+
+- Use `PyMutex` instead of `std::mutex` for internal locking in the
+ free-threaded build.
+ [#5219](https://github.com/pybind/pybind11/pull/5219)
+- Add a special type annotation for C++ empty tuple.
+ [#5214](https://github.com/pybind/pybind11/pull/5214)
+- When compiling for WebAssembly, add the required exception flags
+ (CMake 3.13+). [#5298](https://github.com/pybind/pybind11/pull/5298)
+
+Bug fixes:
+
+- Make `gil_safe_call_once_and_store` thread-safe in free-threaded
+ CPython. [#5246](https://github.com/pybind/pybind11/pull/5246)
+- A missing `#include ` in pybind11/typing.h was added to fix
+ build errors (in case user code does not already depend on that
+ include). [#5208](https://github.com/pybind/pybind11/pull/5208)
+- Fix regression introduced in \#5201 for GCC\<10.3 in C++20 mode.
+ [#5205](https://github.com/pybind/pybind11/pull/5205)
+
+
+
+- Remove extra = when assigning flto value in the case for Clang in
+ CMake. [#5207](https://github.com/pybind/pybind11/pull/5207)
+
+Tests:
+
+- Adding WASM testing to our CI (Pyodide / Emscripten via
+ scikit-build-core).
+ [#4745](https://github.com/pybind/pybind11/pull/4745)
+- clang-tidy (in GitHub Actions) was updated from clang 15 to clang 18.
+ [#5272](https://github.com/pybind/pybind11/pull/5272)
+
+## Version 2.13.1 (June 26, 2024)
+
+New Features:
+
+- Add support for `Typing.Callable[..., T]`.
+ [#5202](https://github.com/pybind/pybind11/pull/5202)
+
+Bug fixes:
+
+- Avoid aligned allocation in free-threaded build in order to support
+ macOS versions before 10.14.
+ [#5200](https://github.com/pybind/pybind11/pull/5200)
+
+## Version 2.13.0 (June 25, 2024)
+
+New Features:
+
+- Support free-threaded CPython (3.13t). Add `py::mod_gil_not_used()`
+ tag to indicate if a module supports running with the GIL disabled.
+ [#5148](https://github.com/pybind/pybind11/pull/5148)
+- Support for Python 3.6 was removed. (Official end-of-life:
+ 2021-12-23). [#5177](https://github.com/pybind/pybind11/pull/5177)
+- `py::list` gained a `.clear()` method.
+ [#5153](https://github.com/pybind/pybind11/pull/5153)
+
+
+
+- Support for `Union`, `Optional`, `type[T]`, `typing.TypeGuard`,
+ `typing.TypeIs`, `typing.Never`, `typing.NoReturn` and
+ `typing.Literal` was added to `pybind11/typing.h`.
+ [#5166](https://github.com/pybind/pybind11/pull/5166)
+ [#5165](https://github.com/pybind/pybind11/pull/5165)
+ [#5194](https://github.com/pybind/pybind11/pull/5194)
+ [#5193](https://github.com/pybind/pybind11/pull/5193)
+ [#5192](https://github.com/pybind/pybind11/pull/5192)
+
+
+
+- In CMake, if `PYBIND11_USE_CROSSCOMPILING` is enabled, then
+ `CMAKE_CROSSCOMPILING` will be respected and will keep pybind11 from
+ accessing the interpreter during configuration. Several CMake
+ variables will be required in this case, but can be deduced from the
+ environment variable `SETUPTOOLS_EXT_SUFFIX`. The default (currently
+ `OFF`) may be changed in the future.
+ [#5083](https://github.com/pybind/pybind11/pull/5083)
+
+Bug fixes:
+
+- A refcount bug (leading to heap-use-after-free) involving trampoline
+ functions with `PyObject *` return type was fixed.
+ [#5156](https://github.com/pybind/pybind11/pull/5156)
+- Return `py::ssize_t` from `.ref_count()` instead of `int`.
+ [#5139](https://github.com/pybind/pybind11/pull/5139)
+- A subtle bug involving C++ types with unusual `operator&` overrides
+ was fixed. [#5189](https://github.com/pybind/pybind11/pull/5189)
+- Support Python 3.13 with minor fix, add to CI.
+ [#5127](https://github.com/pybind/pybind11/pull/5127)
+
+
+
+- Fix mistake affecting old cmake and old boost.
+ [#5149](https://github.com/pybind/pybind11/pull/5149)
+
+Documentation:
+
+- Build docs updated to feature scikit-build-core and meson-python, and
+ updated setuptools instructions.
+ [#5168](https://github.com/pybind/pybind11/pull/5168)
+
+Tests:
+
+- Avoid immortal objects in tests.
+ [#5150](https://github.com/pybind/pybind11/pull/5150)
+
+CI:
+
+- Compile against Python 3.13t in CI.
+- Use `macos-13` (Intel) for CI jobs for now (will drop Python 3.7
+ soon). [#5109](https://github.com/pybind/pybind11/pull/5109)
+- Releases now have artifact attestations, visible at
+ .
+ [#5196](https://github.com/pybind/pybind11/pull/5196)
+
+Other:
+
+- Some cleanup in preparation for 3.13 support.
+ [#5137](https://github.com/pybind/pybind11/pull/5137)
+- Avoid a warning by ensuring an iterator end check is included in
+ release mode. [#5129](https://github.com/pybind/pybind11/pull/5129)
+- Bump max cmake to 3.29.
+ [#5075](https://github.com/pybind/pybind11/pull/5075)
+- Update docs and noxfile.
+ [#5071](https://github.com/pybind/pybind11/pull/5071)
+
+## Version 2.12.1 (September 13, 2024)
+
+New Features:
+
+- A new `self._pybind11_conduit_v1_()` method is automatically added to
+ all `py::class_`-wrapped types, to enable type-safe interoperability
+ between different independent Python/C++ bindings systems, including
+ pybind11 versions with different `PYBIND11_INTERNALS_VERSION`'s.
+ Supported on pybind11 2.11.2, 2.12.1, and 2.13.6+.
+ [#5296](https://github.com/pybind/pybind11/pull/5296)
+
+## Version 2.12.0 (March 27, 2024)
+
+New Features:
+
+- `pybind11` now supports compiling for [NumPy
+ 2](https://numpy.org/devdocs/numpy_2_0_migration_guide.html). Most
+ code shouldn't change (see `upgrade-guide-2.12` for details). However,
+ if you experience issues you can define `PYBIND11_NUMPY_1_ONLY` to
+ disable the new support for now, but this will be removed in the
+ future. [#5050](https://github.com/pybind/pybind11/pull/5050)
+- `pybind11/gil_safe_call_once.h` was added (it needs to be included
+ explicitly). The primary use case is GIL-safe initialization of C++
+ `static` variables.
+ [#4877](https://github.com/pybind/pybind11/pull/4877)
+- Support move-only iterators in `py::make_iterator`,
+ `py::make_key_iterator`, `py::make_value_iterator`.
+ [#4834](https://github.com/pybind/pybind11/pull/4834)
+- Two simple `py::set_error()` functions were added and the
+ documentation was updated accordingly. In particular,
+ `py::exception<>::operator()` was deprecated (use one of the new
+ functions instead). The documentation for `py::exception<>` was
+ further updated to not suggest code that may result in undefined
+ behavior. [#4772](https://github.com/pybind/pybind11/pull/4772)
+
+Bug fixes:
+
+- Removes potential for Undefined Behavior during process teardown.
+ [#4897](https://github.com/pybind/pybind11/pull/4897)
+- Improve compatibility with the nvcc compiler (especially CUDA
+ 12.1/12.2). [#4893](https://github.com/pybind/pybind11/pull/4893)
+- `pybind11/numpy.h` now imports NumPy's `multiarray` and `_internal`
+ submodules with paths depending on the installed version of NumPy (for
+ compatibility with NumPy 2).
+ [#4857](https://github.com/pybind/pybind11/pull/4857)
+- Builtins collections names in docstrings are now consistently rendered
+ in lowercase (list, set, dict, tuple), in accordance with PEP 585.
+ [#4833](https://github.com/pybind/pybind11/pull/4833)
+- Added `py::typing::Iterator`, `py::typing::Iterable`.
+ [#4832](https://github.com/pybind/pybind11/pull/4832)
+- Render `py::function` as `Callable` in docstring.
+ [#4829](https://github.com/pybind/pybind11/pull/4829)
+- Also bump `PYBIND11_INTERNALS_VERSION` for MSVC, which unlocks two new
+ features without creating additional incompatibilities.
+ [#4819](https://github.com/pybind/pybind11/pull/4819)
+- Guard against crashes/corruptions caused by modules built with
+ different MSVC versions.
+ [#4779](https://github.com/pybind/pybind11/pull/4779)
+- A long-standing bug in the handling of Python multiple inheritance was
+ fixed. See PR \#4762 for the rather complex details.
+ [#4762](https://github.com/pybind/pybind11/pull/4762)
+- Fix `bind_map` with `using` declarations.
+ [#4952](https://github.com/pybind/pybind11/pull/4952)
+- Qualify `py::detail::concat` usage to avoid ADL selecting one from
+ somewhere else, such as modernjson's concat.
+ [#4955](https://github.com/pybind/pybind11/pull/4955)
+- Use new PyCode API on Python 3.12+.
+ [#4916](https://github.com/pybind/pybind11/pull/4916)
+- Minor cleanup from warnings reported by Clazy.
+ [#4988](https://github.com/pybind/pybind11/pull/4988)
+- Remove typing and duplicate `class_` for
+ `KeysView`/`ValuesView`/`ItemsView`.
+ [#4985](https://github.com/pybind/pybind11/pull/4985)
+- Use `PyObject_VisitManagedDict()` and `PyObject_ClearManagedDict()` on
+ Python 3.13 and newer.
+ [#4973](https://github.com/pybind/pybind11/pull/4973)
+- Update `make_static_property_type()` to make it compatible with Python
+ 3.13. [#4971](https://github.com/pybind/pybind11/pull/4971)
+
+
+
+- Render typed iterators for `make_iterator`, `make_key_iterator`,
+ `make_value_iterator`.
+ [#4876](https://github.com/pybind/pybind11/pull/4876)
+- Add several missing type name specializations.
+ [#5073](https://github.com/pybind/pybind11/pull/5073)
+- Change docstring render for `py::buffer`, `py::sequence` and
+ `py::handle` (to `Buffer`, `Sequence`, `Any`).
+ [#4831](https://github.com/pybind/pybind11/pull/4831)
+- Fixed `base_enum.__str__` docstring.
+ [#4827](https://github.com/pybind/pybind11/pull/4827)
+- Enforce single line docstring signatures.
+ [#4735](https://github.com/pybind/pybind11/pull/4735)
+- Special 'typed' wrappers now available in `typing.h` to annotate
+ tuple, dict, list, set, and function.
+ [#4259](https://github.com/pybind/pybind11/pull/4259)
+- Create `handle_type_name` specialization to type-hint variable length
+ tuples. [#5051](https://github.com/pybind/pybind11/pull/5051)
+
+
+
+- Setting `PYBIND11_FINDPYTHON` to OFF will force the old FindPythonLibs
+ mechanism to be used.
+ [#5042](https://github.com/pybind/pybind11/pull/5042)
+- Skip empty `PYBIND11_PYTHON_EXECUTABLE_LAST` for the first cmake run.
+ [#4856](https://github.com/pybind/pybind11/pull/4856)
+- Fix FindPython mode exports & avoid `pkg_resources` if
+ `importlib.metadata` available.
+ [#4941](https://github.com/pybind/pybind11/pull/4941)
+- `Python_ADDITIONAL_VERSIONS` (classic search) now includes 3.12.
+ [#4909](https://github.com/pybind/pybind11/pull/4909)
+- `pybind11.pc` is now relocatable by default as long as install
+ destinations are not absolute paths.
+ [#4830](https://github.com/pybind/pybind11/pull/4830)
+- Correctly detect CMake FindPython removal when used as a subdirectory.
+ [#4806](https://github.com/pybind/pybind11/pull/4806)
+- Don't require the libs component on CMake 3.18+ when using
+ PYBIND11_FINDPYTHON (fixes manylinux builds).
+ [#4805](https://github.com/pybind/pybind11/pull/4805)
+- `pybind11_strip` is no longer automatically applied when
+ `CMAKE_BUILD_TYPE` is unset.
+ [#4780](https://github.com/pybind/pybind11/pull/4780)
+- Support `DEBUG_POSFIX` correctly for debug builds.
+ [#4761](https://github.com/pybind/pybind11/pull/4761)
+- Hardcode lto/thin lto for Emscripten cross-compiles.
+ [#4642](https://github.com/pybind/pybind11/pull/4642)
+- Upgrade maximum supported CMake version to 3.27 to fix CMP0148
+ warnings. [#4786](https://github.com/pybind/pybind11/pull/4786)
+
+Documentation:
+
+- Small fix to grammar in `functions.rst`.
+ [#4791](https://github.com/pybind/pybind11/pull/4791)
+- Remove upper bound in example pyproject.toml for setuptools.
+ [#4774](https://github.com/pybind/pybind11/pull/4774)
+
+CI:
+
+- CI: Update NVHPC to 23.5 and Ubuntu 20.04.
+ [#4764](https://github.com/pybind/pybind11/pull/4764)
+- Test on PyPy 3.10.
+ [#4714](https://github.com/pybind/pybind11/pull/4714)
+
+Other:
+
+- Use Ruff formatter instead of Black.
+ [#4912](https://github.com/pybind/pybind11/pull/4912)
+- An `assert()` was added to help Coverty avoid generating a false
+ positive. [#4817](https://github.com/pybind/pybind11/pull/4817)
+
+## Version 2.11.2 (September 13, 2024)
+
+New Features:
+
+- A new `self._pybind11_conduit_v1_()` method is automatically added to
+ all `py::class_`-wrapped types, to enable type-safe interoperability
+ between different independent Python/C++ bindings systems, including
+ pybind11 versions with different `PYBIND11_INTERNALS_VERSION`'s.
+ Supported on pybind11 2.11.2, 2.12.1, and 2.13.6+.
+ [#5296](https://github.com/pybind/pybind11/pull/5296)
+
+## Version 2.11.1 (July 17, 2023)
+
+Changes:
+
+- `PYBIND11_NO_ASSERT_GIL_HELD_INCREF_DECREF` is now provided as an
+ option for disabling the default-on `PyGILState_Check()`'s in
+ `pybind11::handle`'s `inc_ref()` & `dec_ref()`.
+ [#4753](https://github.com/pybind/pybind11/pull/4753)
+- `PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF` was disabled for PyPy in
+ general (not just PyPy Windows).
+ [#4751](https://github.com/pybind/pybind11/pull/4751)
+
+## Version 2.11.0 (July 14, 2023)
+
+New features:
+
+- The newly added `pybind11::detail::is_move_constructible` trait can be
+ specialized for cases in which `std::is_move_constructible` does not
+ work as needed. This is very similar to the long-established
+ `pybind11::detail::is_copy_constructible`.
+ [#4631](https://github.com/pybind/pybind11/pull/4631)
+- Introduce `recursive_container_traits`.
+ [#4623](https://github.com/pybind/pybind11/pull/4623)
+- `pybind11/type_caster_pyobject_ptr.h` was added to support automatic
+ wrapping of APIs that make use of `PyObject *`. This header needs to
+ included explicitly (i.e. it is not included implicitly with
+ `pybind/pybind11.h`).
+ [#4601](https://github.com/pybind/pybind11/pull/4601)
+- `format_descriptor<>` & `npy_format_descriptor<>` `PyObject *`
+ specializations were added. The latter enables
+ `py::array_t` to/from-python conversions.
+ [#4674](https://github.com/pybind/pybind11/pull/4674)
+- `buffer_info` gained an `item_type_is_equivalent_to()` member
+ function. [#4674](https://github.com/pybind/pybind11/pull/4674)
+- The `capsule` API gained a user-friendly constructor
+ (`py::capsule(ptr, "name", dtor)`).
+ [#4720](https://github.com/pybind/pybind11/pull/4720)
+
+Changes:
+
+- `PyGILState_Check()`'s in `pybind11::handle`'s `inc_ref()` &
+ `dec_ref()` are now enabled by default again.
+ [#4246](https://github.com/pybind/pybind11/pull/4246)
+- `py::initialize_interpreter()` using `PyConfig_InitPythonConfig()`
+ instead of `PyConfig_InitIsolatedConfig()`, to obtain complete
+ `sys.path`. [#4473](https://github.com/pybind/pybind11/pull/4473)
+- Cast errors now always include Python type information, even if
+ `PYBIND11_DETAILED_ERROR_MESSAGES` is not defined. This increases
+ binary sizes slightly (~1.5%) but the error messages are much more
+ informative. [#4463](https://github.com/pybind/pybind11/pull/4463)
+- The docstring generation for the `std::array`-list caster was fixed.
+ Previously, signatures included the size of the list in a
+ non-standard, non-spec compliant way. The new format conforms to
+ PEP 593. **Tooling for processing the docstrings may need to be
+ updated accordingly.**
+ [#4679](https://github.com/pybind/pybind11/pull/4679)
+- Setter return values (which are inaccessible for all practical
+ purposes) are no longer converted to Python (only to be discarded).
+ [#4621](https://github.com/pybind/pybind11/pull/4621)
+- Allow lambda specified to function definition to be `noexcept(true)`
+ in C++17. [#4593](https://github.com/pybind/pybind11/pull/4593)
+- Get rid of recursive template instantiations for concatenating type
+ signatures on C++17 and higher.
+ [#4587](https://github.com/pybind/pybind11/pull/4587)
+- Compatibility with Python 3.12 (beta). Note that the minimum pybind11
+ ABI version for Python 3.12 is version 5. (The default ABI version for
+ Python versions up to and including 3.11 is still version 4.).
+ [#4570](https://github.com/pybind/pybind11/pull/4570)
+- With `PYBIND11_INTERNALS_VERSION 5` (default for Python 3.12+), MSVC
+ builds use `std::hash` and
+ `std::equal_to` instead of string-based type
+ comparisons. This resolves issues when binding types defined in the
+ unnamed namespace.
+ [#4319](https://github.com/pybind/pybind11/pull/4319)
+- Python exception `__notes__` (introduced with Python 3.11) are now
+ added to the `error_already_set::what()` output.
+ [#4678](https://github.com/pybind/pybind11/pull/4678)
+
+Build system improvements:
+
+- CMake 3.27 support was added, CMake 3.4 support was dropped.
+ FindPython will be used if `FindPythonInterp` is not present.
+ [#4719](https://github.com/pybind/pybind11/pull/4719)
+- Update clang-tidy to 15 in CI.
+ [#4387](https://github.com/pybind/pybind11/pull/4387)
+- Moved the linting framework over to Ruff.
+ [#4483](https://github.com/pybind/pybind11/pull/4483)
+- Skip `lto` checks and target generation when
+ `CMAKE_INTERPROCEDURAL_OPTIMIZATION` is defined.
+ [#4643](https://github.com/pybind/pybind11/pull/4643)
+- No longer inject `-stdlib=libc++`, not needed for modern Pythons
+ (macOS 10.9+). [#4639](https://github.com/pybind/pybind11/pull/4639)
+- PyPy 3.10 support was added, PyPy 3.7 support was dropped.
+ [#4728](https://github.com/pybind/pybind11/pull/4728)
+- Testing with Python 3.12 beta releases was added.
+ [#4713](https://github.com/pybind/pybind11/pull/4713)
+
+## Version 2.10.4 (Mar 16, 2023)
+
+Changes:
+
+- `python3 -m pybind11` gained a `--version` option (prints the version
+ and exits). [#4526](https://github.com/pybind/pybind11/pull/4526)
+
+Bug Fixes:
+
+- Fix a warning when pydebug is enabled on Python 3.11.
+ [#4461](https://github.com/pybind/pybind11/pull/4461)
+- Ensure `gil_scoped_release` RAII is non-copyable.
+ [#4490](https://github.com/pybind/pybind11/pull/4490)
+- Ensure the tests dir does not show up with new versions of setuptools.
+ [#4510](https://github.com/pybind/pybind11/pull/4510)
+- Better stacklevel for a warning in setuptools helpers.
+ [#4516](https://github.com/pybind/pybind11/pull/4516)
+
+## Version 2.10.3 (Jan 3, 2023)
+
+Changes:
+
+- Temporarily made our GIL status assertions (added in 2.10.2) disabled
+ by default (re-enable manually by defining
+ `PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF`, will be enabled in 2.11).
+ [#4432](https://github.com/pybind/pybind11/pull/4432)
+- Improved error messages when `inc_ref`/`dec_ref` are called with an
+ invalid GIL state.
+ [#4427](https://github.com/pybind/pybind11/pull/4427)
+ [#4436](https://github.com/pybind/pybind11/pull/4436)
+
+Bug Fixes:
+
+- Some minor touchups found by static analyzers.
+ [#4440](https://github.com/pybind/pybind11/pull/4440)
+
+## Version 2.10.2 (Dec 20, 2022)
+
+Changes:
+
+- `scoped_interpreter` constructor taking `PyConfig`.
+ [#4330](https://github.com/pybind/pybind11/pull/4330)
+- `pybind11/eigen/tensor.h` adds converters to and from `Eigen::Tensor`
+ and `Eigen::TensorMap`.
+ [#4201](https://github.com/pybind/pybind11/pull/4201)
+- `PyGILState_Check()`'s were integrated to `pybind11::handle`
+ `inc_ref()` & `dec_ref()`. The added GIL checks are guarded by
+ `PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF`, which is the default only if
+ `NDEBUG` is not defined. (Made non-default in 2.10.3, will be active
+ in 2.11) [#4246](https://github.com/pybind/pybind11/pull/4246)
+- Add option for enable/disable enum members in docstring.
+ [#2768](https://github.com/pybind/pybind11/pull/2768)
+- Fixed typing of `KeysView`, `ValuesView` and `ItemsView` in
+ `bind_map`. [#4353](https://github.com/pybind/pybind11/pull/4353)
+
+Bug fixes:
+
+- Bug fix affecting only Python 3.6 under very specific, uncommon
+ conditions: move `PyEval_InitThreads()` call to the correct location.
+ [#4350](https://github.com/pybind/pybind11/pull/4350)
+- Fix segfault bug when passing foreign native functions to
+ functional.h. [#4254](https://github.com/pybind/pybind11/pull/4254)
+
+Build system improvements:
+
+- Support setting PYTHON_LIBRARIES manually for Windows ARM
+ cross-compilation (classic mode).
+ [#4406](https://github.com/pybind/pybind11/pull/4406)
+- Extend IPO/LTO detection for ICX (a.k.a IntelLLVM) compiler.
+ [#4402](https://github.com/pybind/pybind11/pull/4402)
+- Allow calling `find_package(pybind11 CONFIG)` multiple times from
+ separate directories in the same CMake project and properly link
+ Python (new mode).
+ [#4401](https://github.com/pybind/pybind11/pull/4401)
+- `multiprocessing_set_spawn` in pytest fixture for added safety.
+ [#4377](https://github.com/pybind/pybind11/pull/4377)
+- Fixed a bug in two pybind11/tools cmake scripts causing "Unknown
+ arguments specified" errors.
+ [#4327](https://github.com/pybind/pybind11/pull/4327)
+
+## Version 2.10.1 (Oct 31, 2022)
+
+This is the first version to fully support embedding the newly released
+Python 3.11.
+
+Changes:
+
+- Allow `pybind11::capsule` constructor to take null destructor
+ pointers. [#4221](https://github.com/pybind/pybind11/pull/4221)
+- `embed.h` was changed so that `PYTHONPATH` is used also with Python
+ 3.11 (established behavior).
+ [#4119](https://github.com/pybind/pybind11/pull/4119)
+- A `PYBIND11_SIMPLE_GIL_MANAGEMENT` option was added (cmake, C++
+ define), along with many additional tests in `test_gil_scoped.py`. The
+ option may be useful to try when debugging GIL-related issues, to
+ determine if the more complex default implementation is or is not to
+ blame. See \#4216 for background. WARNING: Please be careful to not
+ create ODR violations when using the option: everything that is linked
+ together with mutual symbol visibility needs to be rebuilt.
+ [#4216](https://github.com/pybind/pybind11/pull/4216)
+- `PYBIND11_EXPORT_EXCEPTION` was made non-empty only under macOS. This
+ makes Linux builds safer, and enables the removal of warning
+ suppression pragmas for Windows.
+ [#4298](https://github.com/pybind/pybind11/pull/4298)
+
+Bug fixes:
+
+- Fixed a bug where `UnicodeDecodeError` was not propagated from various
+ `py::str` ctors when decoding surrogate utf characters.
+ [#4294](https://github.com/pybind/pybind11/pull/4294)
+- Revert perfect forwarding for `make_iterator`. This broke at least one
+ valid use case. May revisit later.
+ [#4234](https://github.com/pybind/pybind11/pull/4234)
+- Fix support for safe casts to `void*` (regression in 2.10.0).
+ [#4275](https://github.com/pybind/pybind11/pull/4275)
+- Fix `char8_t` support (regression in 2.9).
+ [#4278](https://github.com/pybind/pybind11/pull/4278)
+- Unicode surrogate character in Python exception message leads to
+ process termination in `error_already_set::what()`.
+ [#4297](https://github.com/pybind/pybind11/pull/4297)
+- Fix MSVC 2019 v.1924 & C++14 mode error for `overload_cast`.
+ [#4188](https://github.com/pybind/pybind11/pull/4188)
+- Make augmented assignment operators non-const for the object-api.
+ Behavior was previously broken for augmented assignment operators.
+ [#4065](https://github.com/pybind/pybind11/pull/4065)
+- Add proper error checking to C++ bindings for Python list append and
+ insert. [#4208](https://github.com/pybind/pybind11/pull/4208)
+- Work-around for Nvidia's CUDA nvcc compiler in versions 11.4.0 -
+ 11.8.0. [#4220](https://github.com/pybind/pybind11/pull/4220)
+- A workaround for PyPy was added in the `py::error_already_set`
+ implementation, related to PR
+ [#1895](https://github.com/pybind/pybind11/pull/1895) released with
+ v2.10.0. [#4079](https://github.com/pybind/pybind11/pull/4079)
+- Fixed compiler errors when C++23 `std::forward_like` is available.
+ [#4136](https://github.com/pybind/pybind11/pull/4136)
+- Properly raise exceptions in contains methods (like when an object in
+ unhashable). [#4209](https://github.com/pybind/pybind11/pull/4209)
+- Further improve another error in exception handling.
+ [#4232](https://github.com/pybind/pybind11/pull/4232)
+- `get_local_internals()` was made compatible with
+ `finalize_interpreter()`, fixing potential freezes during interpreter
+ finalization. [#4192](https://github.com/pybind/pybind11/pull/4192)
+
+Performance and style:
+
+- Reserve space in set and STL map casters if possible. This will
+ prevent unnecessary rehashing / resizing by knowing the number of keys
+ ahead of time for Python to C++ casting. This improvement will greatly
+ speed up the casting of large unordered maps and sets.
+ [#4194](https://github.com/pybind/pybind11/pull/4194)
+- GIL RAII scopes are non-copyable to avoid potential bugs.
+ [#4183](https://github.com/pybind/pybind11/pull/4183)
+- Explicitly default all relevant ctors for pytypes in the
+ `PYBIND11_OBJECT` macros and enforce the clang-tidy checks
+ `modernize-use-equals-default` in macros as well.
+ [#4017](https://github.com/pybind/pybind11/pull/4017)
+- Optimize iterator advancement in C++ bindings.
+ [#4237](https://github.com/pybind/pybind11/pull/4237)
+- Use the modern `PyObject_GenericGetDict` and `PyObject_GenericSetDict`
+ for handling dynamic attribute dictionaries.
+ [#4106](https://github.com/pybind/pybind11/pull/4106)
+- Document that users should use `PYBIND11_NAMESPACE` instead of using
+ `pybind11` when opening namespaces. Using namespace declarations and
+ namespace qualification remain the same as `pybind11`. This is done to
+ ensure consistent symbol visibility.
+ [#4098](https://github.com/pybind/pybind11/pull/4098)
+- Mark `detail::forward_like` as constexpr.
+ [#4147](https://github.com/pybind/pybind11/pull/4147)
+- Optimize unpacking_collector when processing `arg_v` arguments.
+ [#4219](https://github.com/pybind/pybind11/pull/4219)
+- Optimize casting C++ object to `None`.
+ [#4269](https://github.com/pybind/pybind11/pull/4269)
+
+Build system improvements:
+
+- CMake: revert overwrite behavior, now opt-in with
+ `PYBIND11_PYTHONLIBS_OVERRWRITE OFF`.
+ [#4195](https://github.com/pybind/pybind11/pull/4195)
+- Include a pkg-config file when installing pybind11, such as in the
+ Python package. [#4077](https://github.com/pybind/pybind11/pull/4077)
+- Avoid stripping debug symbols when `CMAKE_BUILD_TYPE` is set to
+ `DEBUG` instead of `Debug`.
+ [#4078](https://github.com/pybind/pybind11/pull/4078)
+- Followup to [#3948](https://github.com/pybind/pybind11/pull/3948),
+ fixing vcpkg again.
+ [#4123](https://github.com/pybind/pybind11/pull/4123)
+
+## Version 2.10.0 (Jul 15, 2022)
+
+Removed support for Python 2.7, Python 3.5, and MSVC 2015. Support for
+MSVC 2017 is limited due to availability of CI runners; we highly
+recommend MSVC 2019 or 2022 be used. Initial support added for Python
+3.11.
+
+New features:
+
+- `py::anyset` & `py::frozenset` were added, with copying (cast) to
+ `std::set` (similar to `set`).
+ [#3901](https://github.com/pybind/pybind11/pull/3901)
+- Support bytearray casting to string.
+ [#3707](https://github.com/pybind/pybind11/pull/3707)
+- `type_caster` was added. `std::monostate` is a tag
+ type that allows `std::variant` to act as an optional, or allows
+ default construction of a `std::variant` holding a non-default
+ constructible type.
+ [#3818](https://github.com/pybind/pybind11/pull/3818)
+- `pybind11::capsule::set_name` added to mutate the name of the capsule
+ instance. [#3866](https://github.com/pybind/pybind11/pull/3866)
+- NumPy: dtype constructor from type number added, accessors
+ corresponding to Python API `dtype.num`, `dtype.byteorder`,
+ `dtype.flags` and `dtype.alignment` added.
+ [#3868](https://github.com/pybind/pybind11/pull/3868)
+
+Changes:
+
+- Python 3.6 is now the minimum supported version.
+ [#3688](https://github.com/pybind/pybind11/pull/3688)
+ [#3719](https://github.com/pybind/pybind11/pull/3719)
+- The minimum version for MSVC is now 2017.
+ [#3722](https://github.com/pybind/pybind11/pull/3722)
+- Fix issues with CPython 3.11 betas and add to supported test matrix.
+ [#3923](https://github.com/pybind/pybind11/pull/3923)
+- `error_already_set` is now safer and more performant, especially for
+ exceptions with long tracebacks, by delaying computation.
+ [#1895](https://github.com/pybind/pybind11/pull/1895)
+- Improve exception handling in python `str` bindings.
+ [#3826](https://github.com/pybind/pybind11/pull/3826)
+- The bindings for capsules now have more consistent exception handling.
+ [#3825](https://github.com/pybind/pybind11/pull/3825)
+- `PYBIND11_OBJECT_CVT` and `PYBIND11_OBJECT_CVT_DEFAULT` macro can now
+ be used to define classes in namespaces other than pybind11.
+ [#3797](https://github.com/pybind/pybind11/pull/3797)
+- Error printing code now uses `PYBIND11_DETAILED_ERROR_MESSAGES`
+ instead of requiring `NDEBUG`, allowing use with release builds if
+ desired. [#3913](https://github.com/pybind/pybind11/pull/3913)
+- Implicit conversion of the literal `0` to `pybind11::handle` is now
+ disabled. [#4008](https://github.com/pybind/pybind11/pull/4008)
+
+Bug fixes:
+
+- Fix exception handling when `pybind11::weakref()` fails.
+ [#3739](https://github.com/pybind/pybind11/pull/3739)
+- `module_::def_submodule` was missing proper error handling. This is
+ fixed now. [#3973](https://github.com/pybind/pybind11/pull/3973)
+- The behavior or `error_already_set` was made safer and the highly
+ opaque "Unknown internal error occurred" message was replaced with a
+ more helpful message.
+ [#3982](https://github.com/pybind/pybind11/pull/3982)
+- `error_already_set::what()` now handles non-normalized exceptions
+ correctly. [#3971](https://github.com/pybind/pybind11/pull/3971)
+- Support older C++ compilers where filesystem is not yet part of the
+ standard library and is instead included in
+ `std::experimental::filesystem`.
+ [#3840](https://github.com/pybind/pybind11/pull/3840)
+- Fix `-Wfree-nonheap-object` warnings produced by GCC by avoiding
+ returning pointers to static objects with
+ `return_value_policy::take_ownership`.
+ [#3946](https://github.com/pybind/pybind11/pull/3946)
+- Fix cast from pytype rvalue to another pytype.
+ [#3949](https://github.com/pybind/pybind11/pull/3949)
+- Ensure proper behavior when garbage collecting classes with dynamic
+ attributes in Python \>=3.9.
+ [#4051](https://github.com/pybind/pybind11/pull/4051)
+- A couple long-standing `PYBIND11_NAMESPACE`
+ `__attribute__((visibility("hidden")))` inconsistencies are now fixed
+ (affects only unusual environments).
+ [#4043](https://github.com/pybind/pybind11/pull/4043)
+- `pybind11::detail::get_internals()` is now resilient to in-flight
+ Python exceptions.
+ [#3981](https://github.com/pybind/pybind11/pull/3981)
+- Arrays with a dimension of size 0 are now properly converted to
+ dynamic Eigen matrices (more common in NumPy 1.23).
+ [#4038](https://github.com/pybind/pybind11/pull/4038)
+- Avoid catching unrelated errors when importing NumPy.
+ [#3974](https://github.com/pybind/pybind11/pull/3974)
+
+Performance and style:
+
+- Added an accessor overload of `(object &&key)` to reference steal the
+ object when using python types as keys. This prevents unnecessary
+ reference count overhead for attr, dictionary, tuple, and sequence
+ look ups. Added additional regression tests. Fixed a performance bug
+ the caused accessor assignments to potentially perform unnecessary
+ copies. [#3970](https://github.com/pybind/pybind11/pull/3970)
+- Perfect forward all args of `make_iterator`.
+ [#3980](https://github.com/pybind/pybind11/pull/3980)
+- Avoid potential bug in pycapsule destructor by adding an `error_guard`
+ to one of the dtors.
+ [#3958](https://github.com/pybind/pybind11/pull/3958)
+- Optimize dictionary access in `strip_padding` for numpy.
+ [#3994](https://github.com/pybind/pybind11/pull/3994)
+- `stl_bind.h` bindings now take slice args as a const-ref.
+ [#3852](https://github.com/pybind/pybind11/pull/3852)
+- Made slice constructor more consistent, and improve performance of
+ some casters by allowing reference stealing.
+ [#3845](https://github.com/pybind/pybind11/pull/3845)
+- Change numpy dtype from_args method to use const ref.
+ [#3878](https://github.com/pybind/pybind11/pull/3878)
+- Follow rule of three to ensure `PyErr_Restore` is called only once.
+ [#3872](https://github.com/pybind/pybind11/pull/3872)
+- Added missing perfect forwarding for `make_iterator` functions.
+ [#3860](https://github.com/pybind/pybind11/pull/3860)
+- Optimize c++ to python function casting by using the rvalue caster.
+ [#3966](https://github.com/pybind/pybind11/pull/3966)
+- Optimize Eigen sparse matrix casting by removing unnecessary
+ temporary. [#4064](https://github.com/pybind/pybind11/pull/4064)
+- Avoid potential implicit copy/assignment constructors causing double
+ free in `strdup_gaurd`.
+ [#3905](https://github.com/pybind/pybind11/pull/3905)
+- Enable clang-tidy checks `misc-definitions-in-headers`,
+ `modernize-loop-convert`, and `modernize-use-nullptr`.
+ [#3881](https://github.com/pybind/pybind11/pull/3881)
+ [#3988](https://github.com/pybind/pybind11/pull/3988)
+
+Build system improvements:
+
+- CMake: Fix file extension on Windows with cp36 and cp37 using
+ FindPython. [#3919](https://github.com/pybind/pybind11/pull/3919)
+- CMake: Support multiple Python targets (such as on vcpkg).
+ [#3948](https://github.com/pybind/pybind11/pull/3948)
+- CMake: Fix issue with NVCC on Windows.
+ [#3947](https://github.com/pybind/pybind11/pull/3947)
+- CMake: Drop the bitness check on cross compiles (like targeting
+ WebAssembly via Emscripten).
+ [#3959](https://github.com/pybind/pybind11/pull/3959)
+- Add MSVC builds in debug mode to CI.
+ [#3784](https://github.com/pybind/pybind11/pull/3784)
+- MSVC 2022 C++20 coverage was added to GitHub Actions, including Eigen.
+ [#3732](https://github.com/pybind/pybind11/pull/3732),
+ [#3741](https://github.com/pybind/pybind11/pull/3741)
+
+Backend and tidying up:
+
+- New theme for the documentation.
+ [#3109](https://github.com/pybind/pybind11/pull/3109)
+- Remove idioms in code comments. Use more inclusive language.
+ [#3809](https://github.com/pybind/pybind11/pull/3809)
+- `#include ` was removed from the `pybind11/stl.h` header.
+ Your project may break if it has a transitive dependency on this
+ include. The fix is to "Include What You Use".
+ [#3928](https://github.com/pybind/pybind11/pull/3928)
+- Avoid `setup.py ` usage in internal tests.
+ [#3734](https://github.com/pybind/pybind11/pull/3734)
+
+## Version 2.9.2 (Mar 29, 2022)
+
+Changes:
+
+- Enum now has an `__index__` method on Python \<3.8 too.
+ [#3700](https://github.com/pybind/pybind11/pull/3700)
+- Local internals are now cleared after finalizing the interpreter.
+ [#3744](https://github.com/pybind/pybind11/pull/3744)
+
+Bug fixes:
+
+- Better support for Python 3.11 alphas.
+ [#3694](https://github.com/pybind/pybind11/pull/3694)
+- `PYBIND11_TYPE_CASTER` now uses fully qualified symbols, so it can be
+ used outside of `pybind11::detail`.
+ [#3758](https://github.com/pybind/pybind11/pull/3758)
+- Some fixes for PyPy 3.9.
+ [#3768](https://github.com/pybind/pybind11/pull/3768)
+- Fixed a potential memleak in PyPy in `get_type_override`.
+ [#3774](https://github.com/pybind/pybind11/pull/3774)
+- Fix usage of `VISIBILITY_INLINES_HIDDEN`.
+ [#3721](https://github.com/pybind/pybind11/pull/3721)
+
+Build system improvements:
+
+- Uses `sysconfig` module to determine installation locations on Python
+ \>= 3.10, instead of `distutils` which has been deprecated.
+ [#3764](https://github.com/pybind/pybind11/pull/3764)
+- Support Catch 2.13.5+ (supporting GLIBC 2.34+).
+ [#3679](https://github.com/pybind/pybind11/pull/3679)
+- Fix test failures with numpy 1.22 by ignoring whitespace when
+ comparing `str()` of dtypes.
+ [#3682](https://github.com/pybind/pybind11/pull/3682)
+
+Backend and tidying up:
+
+- clang-tidy: added `readability-qualified-auto`,
+ `readability-braces-around-statements`,
+ `cppcoreguidelines-prefer-member-initializer`,
+ `clang-analyzer-optin.performance.Padding`,
+ `cppcoreguidelines-pro-type-static-cast-downcast`, and
+ `readability-inconsistent-declaration-parameter-name`.
+ [#3702](https://github.com/pybind/pybind11/pull/3702),
+ [#3699](https://github.com/pybind/pybind11/pull/3699),
+ [#3716](https://github.com/pybind/pybind11/pull/3716),
+ [#3709](https://github.com/pybind/pybind11/pull/3709)
+- clang-format was added to the pre-commit actions, and the entire code
+ base automatically reformatted (after several iterations preparing for
+ this leap). [#3713](https://github.com/pybind/pybind11/pull/3713)
+
+## Version 2.9.1 (Feb 2, 2022)
+
+Changes:
+
+- If possible, attach Python exception with `py::raise_from` to
+ `TypeError` when casting from C++ to Python. This will give additional
+ info if Python exceptions occur in the caster. Adds a test case of
+ trying to convert a set from C++ to Python when the hash function is
+ not defined in Python.
+ [#3605](https://github.com/pybind/pybind11/pull/3605)
+- Add a mapping of C++11 nested exceptions to their Python exception
+ equivalent using `py::raise_from`. This attaches the nested exceptions
+ in Python using the `__cause__` field.
+ [#3608](https://github.com/pybind/pybind11/pull/3608)
+- Propagate Python exception traceback using `raise_from` if a pybind11
+ function runs out of overloads.
+ [#3671](https://github.com/pybind/pybind11/pull/3671)
+- `py::multiple_inheritance` is now only needed when C++ bases are
+ hidden from pybind11.
+ [#3650](https://github.com/pybind/pybind11/pull/3650) and
+ [#3659](https://github.com/pybind/pybind11/pull/3659)
+
+Bug fixes:
+
+- Remove a boolean cast in `numpy.h` that causes MSVC C4800 warnings
+ when compiling against Python 3.10 or newer.
+ [#3669](https://github.com/pybind/pybind11/pull/3669)
+- Render `py::bool_` and `py::float_` as `bool` and `float`
+ respectively. [#3622](https://github.com/pybind/pybind11/pull/3622)
+
+Build system improvements:
+
+- Fix CMake extension suffix computation on Python 3.10+.
+ [#3663](https://github.com/pybind/pybind11/pull/3663)
+- Allow `CMAKE_ARGS` to override CMake args in pybind11's own
+ `setup.py`. [#3577](https://github.com/pybind/pybind11/pull/3577)
+- Remove a few deprecated c-headers.
+ [#3610](https://github.com/pybind/pybind11/pull/3610)
+- More uniform handling of test targets.
+ [#3590](https://github.com/pybind/pybind11/pull/3590)
+- Add clang-tidy readability check to catch potentially swapped function
+ args. [#3611](https://github.com/pybind/pybind11/pull/3611)
+
+## Version 2.9.0 (Dec 28, 2021)
+
+This is the last version to support Python 2.7 and 3.5.
+
+New Features:
+
+- Allow `py::args` to be followed by other arguments; the remaining
+ arguments are implicitly keyword-only, as if a `py::kw_only{}`
+ annotation had been used.
+ [#3402](https://github.com/pybind/pybind11/pull/3402)
+
+Changes:
+
+- Make str/bytes/memoryview more interoperable with `std::string_view`.
+ [#3521](https://github.com/pybind/pybind11/pull/3521)
+- Replace `_` with `const_name` in internals, avoid defining `pybind::_`
+ if `_` defined as macro (common gettext usage)
+ [#3423](https://github.com/pybind/pybind11/pull/3423)
+
+Bug fixes:
+
+- Fix a rare warning about extra copy in an Eigen constructor.
+ [#3486](https://github.com/pybind/pybind11/pull/3486)
+- Fix caching of the C++ overrides.
+ [#3465](https://github.com/pybind/pybind11/pull/3465)
+- Add missing `std::forward` calls to some `cpp_function` overloads.
+ [#3443](https://github.com/pybind/pybind11/pull/3443)
+- Support PyPy 7.3.7 and the PyPy3.8 beta. Test python-3.11 on PRs with
+ the `python dev` label.
+ [#3419](https://github.com/pybind/pybind11/pull/3419)
+- Replace usage of deprecated `Eigen::MappedSparseMatrix` with
+ `Eigen::Map>` for Eigen 3.3+.
+ [#3499](https://github.com/pybind/pybind11/pull/3499)
+- Tweaks to support Microsoft Visual Studio 2022.
+ [#3497](https://github.com/pybind/pybind11/pull/3497)
+
+Build system improvements:
+
+- Nicer CMake printout and IDE organisation for pybind11's own tests.
+ [#3479](https://github.com/pybind/pybind11/pull/3479)
+- CMake: report version type as part of the version string to avoid a
+ spurious space in the package status message.
+ [#3472](https://github.com/pybind/pybind11/pull/3472)
+- Flags starting with `-g` in `$CFLAGS` and `$CPPFLAGS` are no longer
+ overridden by `.Pybind11Extension`.
+ [#3436](https://github.com/pybind/pybind11/pull/3436)
+- Ensure ThreadPool is closed in `setup_helpers`.
+ [#3548](https://github.com/pybind/pybind11/pull/3548)
+- Avoid LTS on `mips64` and `ppc64le` (reported broken).
+ [#3557](https://github.com/pybind/pybind11/pull/3557)
+
+## v2.8.1 (Oct 27, 2021)
+
+Changes and additions:
+
+- The simple namespace creation shortcut added in 2.8.0 was deprecated
+ due to usage of CPython internal API, and will be removed soon. Use
+ `py::module_::import("types").attr("SimpleNamespace")`.
+ [#3374](https://github.com/pybinyyd/pybind11/pull/3374)
+- Add C++ Exception type to throw and catch `AttributeError`. Useful for
+ defining custom `__setattr__` and `__getattr__` methods.
+ [#3387](https://github.com/pybind/pybind11/pull/3387)
+
+Fixes:
+
+- Fixed the potential for dangling references when using properties with
+ `std::optional` types.
+ [#3376](https://github.com/pybind/pybind11/pull/3376)
+- Modernize usage of `PyCodeObject` on Python 3.9+ (moving toward
+ support for Python 3.11a1)
+ [#3368](https://github.com/pybind/pybind11/pull/3368)
+- A long-standing bug in `eigen.h` was fixed (originally PR \#3343). The
+ bug was unmasked by newly added `static_assert`'s in the Eigen 3.4.0
+ release. [#3352](https://github.com/pybind/pybind11/pull/3352)
+- Support multiple raw inclusion of CMake helper files (Conan.io does
+ this for multi-config generators).
+ [#3420](https://github.com/pybind/pybind11/pull/3420)
+- Fix harmless warning on upcoming CMake 3.22.
+ [#3368](https://github.com/pybind/pybind11/pull/3368)
+- Fix 2.8.0 regression with MSVC 2017 + C++17 mode + Python 3.
+ [#3407](https://github.com/pybind/pybind11/pull/3407)
+- Fix 2.8.0 regression that caused undefined behavior (typically
+ segfaults) in `make_key_iterator`/`make_value_iterator` if
+ dereferencing the iterator returned a temporary value instead of a
+ reference. [#3348](https://github.com/pybind/pybind11/pull/3348)
+
+## v2.8.0 (Oct 4, 2021)
+
+New features:
+
+- Added `py::raise_from` to enable chaining exceptions.
+ [#3215](https://github.com/pybind/pybind11/pull/3215)
+- Allow exception translators to be optionally registered local to a
+ module instead of applying globally across all pybind11 modules. Use
+ `register_local_exception_translator(ExceptionTranslator&& translator)`
+ instead of
+ `register_exception_translator(ExceptionTranslator&& translator)` to
+ keep your exception remapping code local to the module.
+ [#2650](https://github.com/pybinyyd/pybind11/pull/2650)
+- Add `make_simple_namespace` function for instantiating Python
+ `SimpleNamespace` objects. **Deprecated in 2.8.1.**
+ [#2840](https://github.com/pybind/pybind11/pull/2840)
+- `pybind11::scoped_interpreter` and `initialize_interpreter` have new
+ arguments to allow `sys.argv` initialization.
+ [#2341](https://github.com/pybind/pybind11/pull/2341)
+- Allow Python builtins to be used as callbacks in CPython.
+ [#1413](https://github.com/pybind/pybind11/pull/1413)
+- Added `view` to view arrays with a different datatype.
+ [#987](https://github.com/pybind/pybind11/pull/987)
+- Implemented `reshape` on arrays.
+ [#984](https://github.com/pybind/pybind11/pull/984)
+- Enable defining custom `__new__` methods on classes by fixing bug
+ preventing overriding methods if they have non-pybind11 siblings.
+ [#3265](https://github.com/pybind/pybind11/pull/3265)
+- Add `make_value_iterator()`, and fix `make_key_iterator()` to return
+ references instead of copies.
+ [#3293](https://github.com/pybind/pybind11/pull/3293)
+- Improve the classes generated by `bind_map`:
+ [#3310](https://github.com/pybind/pybind11/pull/3310)
+ - Change `.items` from an iterator to a dictionary view.
+ - Add `.keys` and `.values` (both dictionary views).
+ - Allow `__contains__` to take any object.
+- `pybind11::custom_type_setup` was added, for customizing the
+ `PyHeapTypeObject` corresponding to a class, which may be useful for
+ enabling garbage collection support, among other things.
+ [#3287](https://github.com/pybind/pybind11/pull/3287)
+
+Changes:
+
+- Set `__file__` constant when running `eval_file` in an embedded
+ interpreter. [#3233](https://github.com/pybind/pybind11/pull/3233)
+- Python objects and (C++17) `std::optional` now accepted in `py::slice`
+ constructor. [#1101](https://github.com/pybind/pybind11/pull/1101)
+- The pybind11 proxy types `str`, `bytes`, `bytearray`, `tuple`, `list`
+ now consistently support passing `ssize_t` values for sizes and
+ indexes. Previously, only `size_t` was accepted in several interfaces.
+ [#3219](https://github.com/pybind/pybind11/pull/3219)
+- Avoid evaluating `PYBIND11_TLS_REPLACE_VALUE` arguments more than
+ once. [#3290](https://github.com/pybind/pybind11/pull/3290)
+
+Fixes:
+
+- Bug fix: enum value's `__int__` returning non-int when underlying type
+ is bool or of char type.
+ [#1334](https://github.com/pybind/pybind11/pull/1334)
+- Fixes bug in setting error state in Capsule's pointer methods.
+ [#3261](https://github.com/pybind/pybind11/pull/3261)
+- A long-standing memory leak in `py::cpp_function::initialize` was
+ fixed. [#3229](https://github.com/pybind/pybind11/pull/3229)
+- Fixes thread safety for some `pybind11::type_caster` which require
+ lifetime extension, such as for `std::string_view`.
+ [#3237](https://github.com/pybind/pybind11/pull/3237)
+- Restore compatibility with gcc 4.8.4 as distributed by ubuntu-trusty,
+ linuxmint-17. [#3270](https://github.com/pybind/pybind11/pull/3270)
+
+Build system improvements:
+
+- Fix regression in CMake Python package config: improper use of
+ absolute path. [#3144](https://github.com/pybind/pybind11/pull/3144)
+- Cached Python version information could become stale when CMake was
+ re-run with a different Python version. The build system now detects
+ this and updates this information.
+ [#3299](https://github.com/pybind/pybind11/pull/3299)
+- Specified UTF8-encoding in setup.py calls of open().
+ [#3137](https://github.com/pybind/pybind11/pull/3137)
+- Fix a harmless warning from CMake 3.21 with the classic Python
+ discovery. [#3220](https://github.com/pybind/pybind11/pull/3220)
+- Eigen repo and version can now be specified as cmake options.
+ [#3324](https://github.com/pybind/pybind11/pull/3324)
+
+Backend and tidying up:
+
+- Reduced thread-local storage required for keeping alive temporary data
+ for type conversion to one key per ABI version, rather than one key
+ per extension module. This makes the total thread-local storage
+ required by pybind11 2 keys per ABI version.
+ [#3275](https://github.com/pybind/pybind11/pull/3275)
+- Optimize NumPy array construction with additional moves.
+ [#3183](https://github.com/pybind/pybind11/pull/3183)
+- Conversion to `std::string` and `std::string_view` now avoids making
+ an extra copy of the data on Python \>= 3.3.
+ [#3257](https://github.com/pybind/pybind11/pull/3257)
+- Remove const modifier from certain C++ methods on Python collections
+ (`list`, `set`, `dict`) such as (`clear()`, `append()`, `insert()`,
+ etc...) and annotated them with `py-non-const`.
+- Enable readability `clang-tidy-const-return` and remove useless
+ consts. [#3254](https://github.com/pybind/pybind11/pull/3254)
+ [#3194](https://github.com/pybind/pybind11/pull/3194)
+- The clang-tidy `google-explicit-constructor` option was enabled.
+ [#3250](https://github.com/pybind/pybind11/pull/3250)
+- Mark a pytype move constructor as noexcept (perf).
+ [#3236](https://github.com/pybind/pybind11/pull/3236)
+- Enable clang-tidy check to guard against inheritance slicing.
+ [#3210](https://github.com/pybind/pybind11/pull/3210)
+- Legacy warning suppression pragma were removed from eigen.h. On Unix
+ platforms, please use -isystem for Eigen include directories, to
+ suppress compiler warnings originating from Eigen headers. Note that
+ CMake does this by default. No adjustments are needed for Windows.
+ [#3198](https://github.com/pybind/pybind11/pull/3198)
+- Format pybind11 with isort consistent ordering of imports
+ [#3195](https://github.com/pybind/pybind11/pull/3195)
+- The warnings-suppression "pragma clamp" at the top/bottom of pybind11
+ was removed, clearing the path to refactoring and IWYU cleanup.
+ [#3186](https://github.com/pybind/pybind11/pull/3186)
+- Enable most bugprone checks in clang-tidy and fix the found potential
+ bugs and poor coding styles.
+ [#3166](https://github.com/pybind/pybind11/pull/3166)
+- Add `clang-tidy-readability` rules to make boolean casts explicit
+ improving code readability. Also enabled other misc and readability
+ clang-tidy checks.
+ [#3148](https://github.com/pybind/pybind11/pull/3148)
+- Move object in `.pop()` for list.
+ [#3116](https://github.com/pybind/pybind11/pull/3116)
+
+## v2.7.1 (Aug 3, 2021)
+
+Minor missing functionality added:
+
+- Allow Python builtins to be used as callbacks in CPython.
+ [#1413](https://github.com/pybind/pybind11/pull/1413)
+
+Bug fixes:
+
+- Fix regression in CMake Python package config: improper use of
+ absolute path. [#3144](https://github.com/pybind/pybind11/pull/3144)
+- Fix Mingw64 and add to the CI testing matrix.
+ [#3132](https://github.com/pybind/pybind11/pull/3132)
+- Specified UTF8-encoding in setup.py calls of open().
+ [#3137](https://github.com/pybind/pybind11/pull/3137)
+- Add clang-tidy-readability rules to make boolean casts explicit
+ improving code readability. Also enabled other misc and readability
+ clang-tidy checks.
+ [#3148](https://github.com/pybind/pybind11/pull/3148)
+- Move object in `.pop()` for list.
+ [#3116](https://github.com/pybind/pybind11/pull/3116)
+
+Backend and tidying up:
+
+- Removed and fixed warning suppressions.
+ [#3127](https://github.com/pybind/pybind11/pull/3127)
+ [#3129](https://github.com/pybind/pybind11/pull/3129)
+ [#3135](https://github.com/pybind/pybind11/pull/3135)
+ [#3141](https://github.com/pybind/pybind11/pull/3141)
+ [#3142](https://github.com/pybind/pybind11/pull/3142)
+ [#3150](https://github.com/pybind/pybind11/pull/3150)
+ [#3152](https://github.com/pybind/pybind11/pull/3152)
+ [#3160](https://github.com/pybind/pybind11/pull/3160)
+ [#3161](https://github.com/pybind/pybind11/pull/3161)
+
+## v2.7.0 (Jul 16, 2021)
+
+New features:
+
+- Enable `py::implicitly_convertible` for
+ `py::class_`-wrapped types.
+ [#3059](https://github.com/pybind/pybind11/pull/3059)
+- Allow function pointer extraction from overloaded functions.
+ [#2944](https://github.com/pybind/pybind11/pull/2944)
+- NumPy: added `.char_()` to type which gives the NumPy public `char`
+ result, which also distinguishes types by bit length (unlike
+ `.kind()`). [#2864](https://github.com/pybind/pybind11/pull/2864)
+- Add `pybind11::bytearray` to manipulate `bytearray` similar to
+ `bytes`. [#2799](https://github.com/pybind/pybind11/pull/2799)
+- `pybind11/stl/filesystem.h` registers a type caster that, on
+ C++17/Python 3.6+, converts `std::filesystem::path` to `pathlib.Path`
+ and any `os.PathLike` to `std::filesystem::path`.
+ [#2730](https://github.com/pybind/pybind11/pull/2730)
+- A `PYBIND11_VERSION_HEX` define was added, similar to
+ `PY_VERSION_HEX`.
+ [#3120](https://github.com/pybind/pybind11/pull/3120)
+
+Changes:
+
+- `py::str` changed to exclusively hold `PyUnicodeObject`. Previously
+ `py::str` could also hold `bytes`, which is probably surprising, was
+ never documented, and can mask bugs (e.g. accidental use of `py::str`
+ instead of `py::bytes`).
+ [#2409](https://github.com/pybind/pybind11/pull/2409)
+- Add a safety guard to ensure that the Python GIL is held when C++
+ calls back into Python via `object_api<>::operator()` (e.g.
+ `py::function` `__call__`). (This feature is available for Python 3.6+
+ only.) [#2919](https://github.com/pybind/pybind11/pull/2919)
+- Catch a missing `self` argument in calls to `__init__()`.
+ [#2914](https://github.com/pybind/pybind11/pull/2914)
+- Use `std::string_view` if available to avoid a copy when passing an
+ object to a `std::ostream`.
+ [#3042](https://github.com/pybind/pybind11/pull/3042)
+- An important warning about thread safety was added to the `iostream.h`
+ documentation; attempts to make `py::scoped_ostream_redirect` thread
+ safe have been removed, as it was only partially effective.
+ [#2995](https://github.com/pybind/pybind11/pull/2995)
+
+Fixes:
+
+- Performance: avoid unnecessary strlen calls.
+ [#3058](https://github.com/pybind/pybind11/pull/3058)
+- Fix auto-generated documentation string when using `const T` in
+ `pyarray_t`. [#3020](https://github.com/pybind/pybind11/pull/3020)
+- Unify error messages thrown by
+ `simple_collector`/`unpacking_collector`.
+ [#3013](https://github.com/pybind/pybind11/pull/3013)
+- `pybind11::builtin_exception` is now explicitly exported, which means
+ the types included/defined in different modules are identical, and
+ exceptions raised in different modules can be caught correctly. The
+ documentation was updated to explain that custom exceptions that are
+ used across module boundaries need to be explicitly exported as well.
+ [#2999](https://github.com/pybind/pybind11/pull/2999)
+- Fixed exception when printing UTF-8 to a `scoped_ostream_redirect`.
+ [#2982](https://github.com/pybind/pybind11/pull/2982)
+- Pickle support enhancement: `setstate` implementation will attempt to
+ `setattr` `__dict__` only if the unpickled `dict` object is not empty,
+ to not force use of `py::dynamic_attr()` unnecessarily.
+ [#2972](https://github.com/pybind/pybind11/pull/2972)
+- Allow negative timedelta values to roundtrip.
+ [#2870](https://github.com/pybind/pybind11/pull/2870)
+- Fix unchecked errors could potentially swallow signals/other
+ exceptions. [#2863](https://github.com/pybind/pybind11/pull/2863)
+- Add null pointer check with `std::localtime`.
+ [#2846](https://github.com/pybind/pybind11/pull/2846)
+- Fix the `weakref` constructor from `py::object` to create a new
+ `weakref` on conversion.
+ [#2832](https://github.com/pybind/pybind11/pull/2832)
+- Avoid relying on exceptions in C++17 when getting a `shared_ptr`
+ holder from a `shared_from_this` class.
+ [#2819](https://github.com/pybind/pybind11/pull/2819)
+- Allow the codec's exception to be raised instead of `RuntimeError`
+ when casting from `py::str` to `std::string`.
+ [#2903](https://github.com/pybind/pybind11/pull/2903)
+
+Build system improvements:
+
+- In `setup_helpers.py`, test for platforms that have some
+ multiprocessing features but lack semaphores, which `ParallelCompile`
+ requires. [#3043](https://github.com/pybind/pybind11/pull/3043)
+- Fix `pybind11_INCLUDE_DIR` in case `CMAKE_INSTALL_INCLUDEDIR` is
+ absolute. [#3005](https://github.com/pybind/pybind11/pull/3005)
+- Fix bug not respecting `WITH_SOABI` or `WITHOUT_SOABI` to CMake.
+ [#2938](https://github.com/pybind/pybind11/pull/2938)
+- Fix the default `Pybind11Extension` compilation flags with a Mingw64
+ python. [#2921](https://github.com/pybind/pybind11/pull/2921)
+- Clang on Windows: do not pass `/MP` (ignored flag).
+ [#2824](https://github.com/pybind/pybind11/pull/2824)
+- `pybind11.setup_helpers.intree_extensions` can be used to generate
+ `Pybind11Extension` instances from cpp files placed in the Python
+ package source tree.
+ [#2831](https://github.com/pybind/pybind11/pull/2831)
+
+Backend and tidying up:
+
+- Enable clang-tidy performance, readability, and modernization checks
+ throughout the codebase to enforce best coding practices.
+ [#3046](https://github.com/pybind/pybind11/pull/3046),
+ [#3049](https://github.com/pybind/pybind11/pull/3049),
+ [#3051](https://github.com/pybind/pybind11/pull/3051),
+ [#3052](https://github.com/pybind/pybind11/pull/3052),
+ [#3080](https://github.com/pybind/pybind11/pull/3080), and
+ [#3094](https://github.com/pybind/pybind11/pull/3094)
+- Checks for common misspellings were added to the pre-commit hooks.
+ [#3076](https://github.com/pybind/pybind11/pull/3076)
+- Changed `Werror` to stricter `Werror-all` for Intel compiler and fixed
+ minor issues. [#2948](https://github.com/pybind/pybind11/pull/2948)
+- Fixed compilation with GCC \< 5 when the user defines
+ `_GLIBCXX_USE_CXX11_ABI`.
+ [#2956](https://github.com/pybind/pybind11/pull/2956)
+- Added nox support for easier local testing and linting of
+ contributions. [#3101](https://github.com/pybind/pybind11/pull/3101)
+ and [#3121](https://github.com/pybind/pybind11/pull/3121)
+- Avoid RTD style issue with docutils 0.17+.
+ [#3119](https://github.com/pybind/pybind11/pull/3119)
+- Support pipx run, such as `pipx run pybind11 --include` for a quick
+ compile. [#3117](https://github.com/pybind/pybind11/pull/3117)
+
+## v2.6.2 (Jan 26, 2021)
+
+Minor missing functionality added:
+
+- enum: add missing Enum.value property.
+ [#2739](https://github.com/pybind/pybind11/pull/2739)
+- Allow thread termination to be avoided during shutdown for CPython
+ 3.7+ via `.disarm` for `gil_scoped_acquire`/`gil_scoped_release`.
+ [#2657](https://github.com/pybind/pybind11/pull/2657)
+
+Fixed or improved behavior in a few special cases:
+
+- Fix bug where the constructor of `object` subclasses would not throw
+ on being passed a Python object of the wrong type.
+ [#2701](https://github.com/pybind/pybind11/pull/2701)
+- The `type_caster` for integers does not convert Python objects with
+ `__int__` anymore with `noconvert` or during the first round of trying
+ overloads. [#2698](https://github.com/pybind/pybind11/pull/2698)
+- When casting to a C++ integer, `__index__` is always called and not
+ considered as conversion, consistent with Python 3.8+.
+ [#2801](https://github.com/pybind/pybind11/pull/2801)
+
+Build improvements:
+
+- Setup helpers: `extra_compile_args` and `extra_link_args`
+ automatically set by Pybind11Extension are now prepended, which allows
+ them to be overridden by user-set `extra_compile_args` and
+ `extra_link_args`.
+ [#2808](https://github.com/pybind/pybind11/pull/2808)
+- Setup helpers: Don't trigger unused parameter warning.
+ [#2735](https://github.com/pybind/pybind11/pull/2735)
+- CMake: Support running with `--warn-uninitialized` active.
+ [#2806](https://github.com/pybind/pybind11/pull/2806)
+- CMake: Avoid error if included from two submodule directories.
+ [#2804](https://github.com/pybind/pybind11/pull/2804)
+- CMake: Fix `STATIC` / `SHARED` being ignored in FindPython mode.
+ [#2796](https://github.com/pybind/pybind11/pull/2796)
+- CMake: Respect the setting for `CMAKE_CXX_VISIBILITY_PRESET` if
+ defined. [#2793](https://github.com/pybind/pybind11/pull/2793)
+- CMake: Fix issue with FindPython2/FindPython3 not working with
+ `pybind11::embed`.
+ [#2662](https://github.com/pybind/pybind11/pull/2662)
+- CMake: mixing local and installed pybind11's would prioritize the
+ installed one over the local one (regression in 2.6.0).
+ [#2716](https://github.com/pybind/pybind11/pull/2716)
+
+Bug fixes:
+
+- Fixed segfault in multithreaded environments when using
+ `scoped_ostream_redirect`.
+ [#2675](https://github.com/pybind/pybind11/pull/2675)
+- Leave docstring unset when all docstring-related options are disabled,
+ rather than set an empty string.
+ [#2745](https://github.com/pybind/pybind11/pull/2745)
+- The module key in builtins that pybind11 uses to store its internals
+ changed from std::string to a python str type (more natural on Python
+ 2, no change on Python 3).
+ [#2814](https://github.com/pybind/pybind11/pull/2814)
+- Fixed assertion error related to unhandled (later overwritten)
+ exception in CPython 3.8 and 3.9 debug builds.
+ [#2685](https://github.com/pybind/pybind11/pull/2685)
+- Fix `py::gil_scoped_acquire` assert with CPython 3.9 debug build.
+ [#2683](https://github.com/pybind/pybind11/pull/2683)
+- Fix issue with a test failing on pytest 6.2.
+ [#2741](https://github.com/pybind/pybind11/pull/2741)
+
+Warning fixes:
+
+- Fix warning modifying constructor parameter 'flag' that shadows a
+ field of 'set_flag' `[-Wshadow-field-in-constructor-modified]`.
+ [#2780](https://github.com/pybind/pybind11/pull/2780)
+- Suppressed some deprecation warnings about old-style
+ `__init__`/`__setstate__` in the tests.
+ [#2759](https://github.com/pybind/pybind11/pull/2759)
+
+Valgrind work:
+
+- Fix invalid access when calling a pybind11 `__init__` on a
+ non-pybind11 class instance.
+ [#2755](https://github.com/pybind/pybind11/pull/2755)
+- Fixed various minor memory leaks in pybind11's test suite.
+ [#2758](https://github.com/pybind/pybind11/pull/2758)
+- Resolved memory leak in cpp_function initialization when exceptions
+ occurred. [#2756](https://github.com/pybind/pybind11/pull/2756)
+- Added a Valgrind build, checking for leaks and memory-related UB,
+ to CI. [#2746](https://github.com/pybind/pybind11/pull/2746)
+
+Compiler support:
+
+- Intel compiler was not activating C++14 support due to a broken
+ define. [#2679](https://github.com/pybind/pybind11/pull/2679)
+- Support ICC and NVIDIA HPC SDK in C++17 mode.
+ [#2729](https://github.com/pybind/pybind11/pull/2729)
+- Support Intel OneAPI compiler (ICC 20.2) and add to CI.
+ [#2573](https://github.com/pybind/pybind11/pull/2573)
+
+## v2.6.1 (Nov 11, 2020)
+
+- `py::exec`, `py::eval`, and `py::eval_file` now add the builtins
+ module as `"__builtins__"` to their `globals` argument, better
+ matching `exec` and `eval` in pure Python.
+ [#2616](https://github.com/pybind/pybind11/pull/2616)
+- `setup_helpers` will no longer set a minimum macOS version higher than
+ the current version.
+ [#2622](https://github.com/pybind/pybind11/pull/2622)
+- Allow deleting static properties.
+ [#2629](https://github.com/pybind/pybind11/pull/2629)
+- Seal a leak in `def_buffer`, cleaning up the `capture` object after
+ the `class_` object goes out of scope.
+ [#2634](https://github.com/pybind/pybind11/pull/2634)
+- `pybind11_INCLUDE_DIRS` was incorrect, potentially causing a
+ regression if it was expected to include `PYTHON_INCLUDE_DIRS` (please
+ use targets instead).
+ [#2636](https://github.com/pybind/pybind11/pull/2636)
+- Added parameter names to the `py::enum_` constructor and methods,
+ avoiding `arg0` in the generated docstrings.
+ [#2637](https://github.com/pybind/pybind11/pull/2637)
+- Added `needs_recompile` optional function to the `ParallelCompiler`
+ helper, to allow a recompile to be skipped based on a user-defined
+ function. [#2643](https://github.com/pybind/pybind11/pull/2643)
+
+## v2.6.0 (Oct 21, 2020)
+
+See `upgrade-guide-2.6` for help upgrading to the new version.
+
+New features:
+
+- Keyword-only arguments supported in Python 2 or 3 with
+ `py::kw_only()`.
+ [#2100](https://github.com/pybind/pybind11/pull/2100)
+- Positional-only arguments supported in Python 2 or 3 with
+ `py::pos_only()`.
+ [#2459](https://github.com/pybind/pybind11/pull/2459)
+- `py::is_final()` class modifier to block subclassing (CPython only).
+ [#2151](https://github.com/pybind/pybind11/pull/2151)
+- Added `py::prepend()`, allowing a function to be placed at the
+ beginning of the overload chain.
+ [#1131](https://github.com/pybind/pybind11/pull/1131)
+- Access to the type object now provided with `py::type::of()` and
+ `py::type::of(h)`.
+ [#2364](https://github.com/pybind/pybind11/pull/2364)
+- Perfect forwarding support for methods.
+ [#2048](https://github.com/pybind/pybind11/pull/2048)
+- Added `py::error_already_set::discard_as_unraisable()`.
+ [#2372](https://github.com/pybind/pybind11/pull/2372)
+- `py::hash` is now public.
+ [#2217](https://github.com/pybind/pybind11/pull/2217)
+- `py::class_` is now supported. Note that writing to one
+ data member of the union and reading another (type punning) is UB in
+ C++. Thus pybind11-bound enums should never be used for such
+ conversions. [#2320](https://github.com/pybind/pybind11/pull/2320).
+- Classes now check local scope when registering members, allowing a
+ subclass to have a member with the same name as a parent (such as an
+ enum). [#2335](https://github.com/pybind/pybind11/pull/2335)
+
+Code correctness features:
+
+- Error now thrown when `__init__` is forgotten on subclasses.
+ [#2152](https://github.com/pybind/pybind11/pull/2152)
+- Throw error if conversion to a pybind11 type if the Python object
+ isn't a valid instance of that type, such as `py::bytes(o)` when
+ `py::object o` isn't a bytes instance.
+ [#2349](https://github.com/pybind/pybind11/pull/2349)
+- Throw if conversion to `str` fails.
+ [#2477](https://github.com/pybind/pybind11/pull/2477)
+
+API changes:
+
+- `py::module` was renamed `py::module_` to avoid issues with C++20 when
+ used unqualified, but an alias `py::module` is provided for backward
+ compatibility. [#2489](https://github.com/pybind/pybind11/pull/2489)
+- Public constructors for `py::module_` have been deprecated; please use
+ `pybind11::module_::create_extension_module` if you were using the
+ public constructor (fairly rare after `PYBIND11_MODULE` was
+ introduced). [#2552](https://github.com/pybind/pybind11/pull/2552)
+- `PYBIND11_OVERLOAD*` macros and `get_overload` function replaced by
+ correctly-named `PYBIND11_OVERRIDE*` and `get_override`, fixing
+ inconsistencies in the presence of a closing `;` in these macros.
+ `get_type_overload` is deprecated.
+ [#2325](https://github.com/pybind/pybind11/pull/2325)
+
+Packaging / building improvements:
+
+- The Python package was reworked to be more powerful and useful.
+ [#2433](https://github.com/pybind/pybind11/pull/2433)
+ - `build-setuptools` is easier thanks to a new
+ `pybind11.setup_helpers` module, which provides utilities to use
+ setuptools with pybind11. It can be used via PEP 518,
+ `setup_requires`, or by directly importing or copying
+ `setup_helpers.py` into your project.
+ - CMake configuration files are now included in the Python package.
+ Use `pybind11.get_cmake_dir()` or `python -m pybind11 --cmakedir` to
+ get the directory with the CMake configuration files, or include the
+ site-packages location in your `CMAKE_MODULE_PATH`. Or you can use
+ the new `pybind11[global]` extra when you install `pybind11`, which
+ installs the CMake files and headers into your base environment in
+ the standard location.
+ - `pybind11-config` is another way to write `python -m pybind11` if
+ you have your PATH set up.
+ - Added external typing support to the helper module, code from
+ `import pybind11` can now be type checked.
+ [#2588](https://github.com/pybind/pybind11/pull/2588)
+- Minimum CMake required increased to 3.4.
+ [#2338](https://github.com/pybind/pybind11/pull/2338) and
+ [#2370](https://github.com/pybind/pybind11/pull/2370)
+ - Full integration with CMake's C++ standard system and compile
+ features replaces `PYBIND11_CPP_STANDARD`.
+ - Generated config file is now portable to different
+ Python/compiler/CMake versions.
+ - Virtual environments prioritized if `PYTHON_EXECUTABLE` is not set
+ (`venv`, `virtualenv`, and `conda`) (similar to the new FindPython
+ mode).
+ - Other CMake features now natively supported, like
+ `CMAKE_INTERPROCEDURAL_OPTIMIZATION`,
+ `set(CMAKE_CXX_VISIBILITY_PRESET hidden)`.
+ - `CUDA` as a language is now supported.
+ - Helper functions `pybind11_strip`, `pybind11_extension`,
+ `pybind11_find_import` added, see `cmake/index`.
+ - Optional `find-python-mode` and `nopython-mode` with CMake.
+ [#2370](https://github.com/pybind/pybind11/pull/2370)
+- Uninstall target added.
+ [#2265](https://github.com/pybind/pybind11/pull/2265) and
+ [#2346](https://github.com/pybind/pybind11/pull/2346)
+- `pybind11_add_module()` now accepts an optional `OPT_SIZE` flag that
+ switches the binding target to size-based optimization if the global
+ build type can not always be fixed to `MinSizeRel` (except in debug
+ mode, where optimizations remain disabled). `MinSizeRel` or this flag
+ reduces binary size quite substantially (~25% on some platforms).
+ [#2463](https://github.com/pybind/pybind11/pull/2463)
+
+Smaller or developer focused features and fixes:
+
+- Moved `mkdoc.py` to a new repo,
+ [pybind11-mkdoc](https://github.com/pybind/pybind11-mkdoc). There are
+ no longer submodules in the main repo.
+- `py::memoryview` segfault fix and update, with new
+ `py::memoryview::from_memory` in Python 3, and documentation.
+ [#2223](https://github.com/pybind/pybind11/pull/2223)
+- Fix for `buffer_info` on Python 2.
+ [#2503](https://github.com/pybind/pybind11/pull/2503)
+- If `__eq__` defined but not `__hash__`, `__hash__` is now set to
+ `None`. [#2291](https://github.com/pybind/pybind11/pull/2291)
+- `py::ellipsis` now also works on Python 2.
+ [#2360](https://github.com/pybind/pybind11/pull/2360)
+- Pointer to `std::tuple` & `std::pair` supported in cast.
+ [#2334](https://github.com/pybind/pybind11/pull/2334)
+- Small fixes in NumPy support. `py::array` now uses `py::ssize_t` as
+ first argument type.
+ [#2293](https://github.com/pybind/pybind11/pull/2293)
+- Added missing signature for `py::array`.
+ [#2363](https://github.com/pybind/pybind11/pull/2363)
+- `unchecked_mutable_reference` has access to operator `()` and `[]`
+ when const. [#2514](https://github.com/pybind/pybind11/pull/2514)
+- `py::vectorize` is now supported on functions that return void.
+ [#1969](https://github.com/pybind/pybind11/pull/1969)
+- `py::capsule` supports `get_pointer` and `set_pointer`.
+ [#1131](https://github.com/pybind/pybind11/pull/1131)
+- Fix crash when different instances share the same pointer of the same
+ type. [#2252](https://github.com/pybind/pybind11/pull/2252)
+- Fix for `py::len` not clearing Python's error state when it fails and
+ throws. [#2575](https://github.com/pybind/pybind11/pull/2575)
+- Bugfixes related to more extensive testing, new GitHub Actions CI.
+ [#2321](https://github.com/pybind/pybind11/pull/2321)
+- Bug in timezone issue in Eastern hemisphere midnight fixed.
+ [#2438](https://github.com/pybind/pybind11/pull/2438)
+- `std::chrono::time_point` now works when the resolution is not the
+ same as the system.
+ [#2481](https://github.com/pybind/pybind11/pull/2481)
+- Bug fixed where `py::array_t` could accept arrays that did not match
+ the requested ordering.
+ [#2484](https://github.com/pybind/pybind11/pull/2484)
+- Avoid a segfault on some compilers when types are removed in Python.
+ [#2564](https://github.com/pybind/pybind11/pull/2564)
+- `py::arg::none()` is now also respected when passing keyword
+ arguments. [#2611](https://github.com/pybind/pybind11/pull/2611)
+- PyPy fixes, PyPy 7.3.x now supported, including PyPy3. (Known issue
+ with PyPy2 and Windows
+ [#2596](https://github.com/pybind/pybind11/issues/2596)).
+ [#2146](https://github.com/pybind/pybind11/pull/2146)
+- CPython 3.9.0 workaround for undefined behavior (macOS segfault).
+ [#2576](https://github.com/pybind/pybind11/pull/2576)
+- CPython 3.9 warning fixes.
+ [#2253](https://github.com/pybind/pybind11/pull/2253)
+- Improved C++20 support, now tested in CI.
+ [#2489](https://github.com/pybind/pybind11/pull/2489)
+ [#2599](https://github.com/pybind/pybind11/pull/2599)
+- Improved but still incomplete debug Python interpreter support.
+ [#2025](https://github.com/pybind/pybind11/pull/2025)
+- NVCC (CUDA 11) now supported and tested in CI.
+ [#2461](https://github.com/pybind/pybind11/pull/2461)
+- NVIDIA PGI compilers now supported and tested in CI.
+ [#2475](https://github.com/pybind/pybind11/pull/2475)
+- At least Intel 18 now explicitly required when compiling with Intel.
+ [#2577](https://github.com/pybind/pybind11/pull/2577)
+- Extensive style checking in CI, with
+ [pre-commit](https://pre-commit.com) support. Code modernization,
+ checked by clang-tidy.
+- Expanded docs, including new main page, new installing section, and
+ CMake helpers page, along with over a dozen new sections on existing
+ pages.
+- In GitHub, new docs for contributing and new issue templates.
+
+## v2.5.0 (Mar 31, 2020)
+
+- Use C++17 fold expressions in type casters, if available. This can
+ improve performance during overload resolution when functions have
+ multiple arguments.
+ [#2043](https://github.com/pybind/pybind11/pull/2043).
+- Changed include directory resolution in `pybind11/__init__.py` and
+ installation in `setup.py`. This fixes a number of open issues where
+ pybind11 headers could not be found in certain environments.
+ [#1995](https://github.com/pybind/pybind11/pull/1995).
+- C++20 `char8_t` and `u8string` support.
+ [#2026](https://github.com/pybind/pybind11/pull/2026).
+- CMake: search for Python 3.9.
+ [bb9c91](https://github.com/pybind/pybind11/commit/bb9c91).
+- Fixes for MSYS-based build environments.
+ [#2087](https://github.com/pybind/pybind11/pull/2087),
+ [#2053](https://github.com/pybind/pybind11/pull/2053).
+- STL bindings for `std::vector<...>::clear`.
+ [#2074](https://github.com/pybind/pybind11/pull/2074).
+- Read-only flag for `py::buffer`.
+ [#1466](https://github.com/pybind/pybind11/pull/1466).
+- Exception handling during module initialization.
+ [bf2b031](https://github.com/pybind/pybind11/commit/bf2b031).
+- Support linking against a CPython debug build.
+ [#2025](https://github.com/pybind/pybind11/pull/2025).
+- Fixed issues involving the availability and use of aligned `new` and
+ `delete`. [#1988](https://github.com/pybind/pybind11/pull/1988),
+ [759221](https://github.com/pybind/pybind11/commit/759221).
+- Fixed a resource leak upon interpreter shutdown.
+ [#2020](https://github.com/pybind/pybind11/pull/2020).
+- Fixed error handling in the boolean caster.
+ [#1976](https://github.com/pybind/pybind11/pull/1976).
+
+## v2.4.3 (Oct 15, 2019)
+
+- Adapt pybind11 to a C API convention change in Python 3.8.
+ [#1950](https://github.com/pybind/pybind11/pull/1950).
+
+## v2.4.2 (Sep 21, 2019)
+
+- Replaced usage of a C++14 only construct.
+ [#1929](https://github.com/pybind/pybind11/pull/1929).
+- Made an ifdef future-proof for Python \>= 4.
+ [f3109d](https://github.com/pybind/pybind11/commit/f3109d).
+
+## v2.4.1 (Sep 20, 2019)
+
+- Fixed a problem involving implicit conversion from enumerations to
+ integers on Python 3.8.
+ [#1780](https://github.com/pybind/pybind11/pull/1780).
+
+## v2.4.0 (Sep 19, 2019)
+
+- Try harder to keep pybind11-internal data structures separate when
+ there are potential ABI incompatibilities. Fixes crashes that occurred
+ when loading multiple pybind11 extensions that were e.g. compiled by
+ GCC (libstdc++) and Clang (libc++).
+ [#1588](https://github.com/pybind/pybind11/pull/1588) and
+ [c9f5a](https://github.com/pybind/pybind11/commit/c9f5a).
+- Added support for `__await__`, `__aiter__`, and `__anext__` protocols.
+ [#1842](https://github.com/pybind/pybind11/pull/1842).
+- `pybind11_add_module()`: don't strip symbols when compiling in
+ `RelWithDebInfo` mode.
+ [#1980](https://github.com/pybind/pybind11/pull/1980).
+- `enum_`: Reproduce Python behavior when comparing against invalid
+ values (e.g. `None`, strings, etc.). Add back support for
+ `__invert__()`.
+ [#1912](https://github.com/pybind/pybind11/pull/1912),
+ [#1907](https://github.com/pybind/pybind11/pull/1907).
+- List insertion operation for `py::list`. Added `.empty()` to all
+ collection types. Added `py::set::contains()` and
+ `py::dict::contains()`.
+ [#1887](https://github.com/pybind/pybind11/pull/1887),
+ [#1884](https://github.com/pybind/pybind11/pull/1884),
+ [#1888](https://github.com/pybind/pybind11/pull/1888).
+- `py::details::overload_cast_impl` is available in C++11 mode, can be
+ used like `overload_cast` with an additional set of parentheses.
+ [#1581](https://github.com/pybind/pybind11/pull/1581).
+- Fixed `get_include()` on Conda.
+ [#1877](https://github.com/pybind/pybind11/pull/1877).
+- `stl_bind.h`: negative indexing support.
+ [#1882](https://github.com/pybind/pybind11/pull/1882).
+- Minor CMake fix to add MinGW compatibility.
+ [#1851](https://github.com/pybind/pybind11/pull/1851).
+- GIL-related fixes.
+ [#1836](https://github.com/pybind/pybind11/pull/1836),
+ [8b90b](https://github.com/pybind/pybind11/commit/8b90b).
+- Other very minor/subtle fixes and improvements.
+ [#1329](https://github.com/pybind/pybind11/pull/1329),
+ [#1910](https://github.com/pybind/pybind11/pull/1910),
+ [#1863](https://github.com/pybind/pybind11/pull/1863),
+ [#1847](https://github.com/pybind/pybind11/pull/1847),
+ [#1890](https://github.com/pybind/pybind11/pull/1890),
+ [#1860](https://github.com/pybind/pybind11/pull/1860),
+ [#1848](https://github.com/pybind/pybind11/pull/1848),
+ [#1821](https://github.com/pybind/pybind11/pull/1821),
+ [#1837](https://github.com/pybind/pybind11/pull/1837),
+ [#1833](https://github.com/pybind/pybind11/pull/1833),
+ [#1748](https://github.com/pybind/pybind11/pull/1748),
+ [#1852](https://github.com/pybind/pybind11/pull/1852).
+
+## v2.3.0 (June 11, 2019)
+
+- Significantly reduced module binary size (10-20%) when compiled in
+ C++11 mode with GCC/Clang, or in any mode with MSVC. Function
+ signatures are now always precomputed at compile time (this was
+ previously only available in C++14 mode for non-MSVC compilers).
+ [#934](https://github.com/pybind/pybind11/pull/934).
+
+- Add basic support for tag-based static polymorphism, where classes
+ provide a method to returns the desired type of an instance.
+ [#1326](https://github.com/pybind/pybind11/pull/1326).
+
+- Python type wrappers (`py::handle`, `py::object`, etc.) now support
+ map Python's number protocol onto C++ arithmetic operators such as
+ `operator+`, `operator/=`, etc.
+ [#1511](https://github.com/pybind/pybind11/pull/1511).
+
+- A number of improvements related to enumerations:
+
+ > 1. The `enum_` implementation was rewritten from scratch to reduce
+ > code bloat. Rather than instantiating a full implementation for
+ > each enumeration, most code is now contained in a generic base
+ > class. [#1511](https://github.com/pybind/pybind11/pull/1511).
+ > 2. The `value()` method of `py::enum_` now accepts an optional
+ > docstring that will be shown in the documentation of the
+ > associated enumeration.
+ > [#1160](https://github.com/pybind/pybind11/pull/1160).
+ > 3. check for already existing enum value and throw an error if
+ > present. [#1453](https://github.com/pybind/pybind11/pull/1453).
+
+- Support for over-aligned type allocation via C++17's aligned `new`
+ statement. [#1582](https://github.com/pybind/pybind11/pull/1582).
+
+- Added `py::ellipsis()` method for slicing of multidimensional NumPy
+ arrays [#1502](https://github.com/pybind/pybind11/pull/1502).
+
+- Numerous Improvements to the `mkdoc.py` script for extracting
+ documentation from C++ header files.
+ [#1788](https://github.com/pybind/pybind11/pull/1788).
+
+- `pybind11_add_module()`: allow including Python as a `SYSTEM` include
+ path. [#1416](https://github.com/pybind/pybind11/pull/1416).
+
+- `pybind11/stl.h` does not convert strings to `vector` anymore.
+ [#1258](https://github.com/pybind/pybind11/issues/1258).
+
+- Mark static methods as such to fix auto-generated Sphinx
+ documentation. [#1732](https://github.com/pybind/pybind11/pull/1732).
+
+- Re-throw forced unwind exceptions (e.g. during pthread termination).
+ [#1208](https://github.com/pybind/pybind11/pull/1208).
+
+- Added `__contains__` method to the bindings of maps (`std::map`,
+ `std::unordered_map`).
+ [#1767](https://github.com/pybind/pybind11/pull/1767).
+
+- Improvements to `gil_scoped_acquire`.
+ [#1211](https://github.com/pybind/pybind11/pull/1211).
+
+- Type caster support for `std::deque`.
+ [#1609](https://github.com/pybind/pybind11/pull/1609).
+
+- Support for `std::unique_ptr` holders, whose deleters differ between a
+ base and derived class.
+ [#1353](https://github.com/pybind/pybind11/pull/1353).
+
+- Construction of STL array/vector-like data structures from iterators.
+ Added an `extend()` operation.
+ [#1709](https://github.com/pybind/pybind11/pull/1709),
+
+- CMake build system improvements for projects that include non-C++
+ files (e.g. plain C, CUDA) in `pybind11_add_module` et al.
+ [#1678](https://github.com/pybind/pybind11/pull/1678).
+
+- Fixed asynchronous invocation and deallocation of Python functions
+ wrapped in `std::function`.
+ [#1595](https://github.com/pybind/pybind11/pull/1595).
+
+- Fixes regarding return value policy propagation in STL type casters.
+ [#1603](https://github.com/pybind/pybind11/pull/1603).
+
+- Fixed scoped enum comparisons.
+ [#1571](https://github.com/pybind/pybind11/pull/1571).
+
+- Fixed iostream redirection for code that releases the GIL.
+ [#1368](https://github.com/pybind/pybind11/pull/1368),
+
+- A number of CI-related fixes.
+ [#1757](https://github.com/pybind/pybind11/pull/1757),
+ [#1744](https://github.com/pybind/pybind11/pull/1744),
+ [#1670](https://github.com/pybind/pybind11/pull/1670).
+
+## v2.2.4 (September 11, 2018)
+
+- Use new Python 3.7 Thread Specific Storage (TSS) implementation if
+ available. [#1454](https://github.com/pybind/pybind11/pull/1454),
+ [#1517](https://github.com/pybind/pybind11/pull/1517).
+- Fixes for newer MSVC versions and C++17 mode.
+ [#1347](https://github.com/pybind/pybind11/pull/1347),
+ [#1462](https://github.com/pybind/pybind11/pull/1462).
+- Propagate return value policies to type-specific casters when casting
+ STL containers.
+ [#1455](https://github.com/pybind/pybind11/pull/1455).
+- Allow ostream-redirection of more than 1024 characters.
+ [#1479](https://github.com/pybind/pybind11/pull/1479).
+- Set `Py_DEBUG` define when compiling against a debug Python build.
+ [#1438](https://github.com/pybind/pybind11/pull/1438).
+- Untangle integer logic in number type caster to work for custom types
+ that may only be castable to a restricted set of builtin types.
+ [#1442](https://github.com/pybind/pybind11/pull/1442).
+- CMake build system: Remember Python version in cache file.
+ [#1434](https://github.com/pybind/pybind11/pull/1434).
+- Fix for custom smart pointers: use `std::addressof` to obtain holder
+ address instead of `operator&`.
+ [#1435](https://github.com/pybind/pybind11/pull/1435).
+- Properly report exceptions thrown during module initialization.
+ [#1362](https://github.com/pybind/pybind11/pull/1362).
+- Fixed a segmentation fault when creating empty-shaped NumPy array.
+ [#1371](https://github.com/pybind/pybind11/pull/1371).
+- The version of Intel C++ compiler must be \>= 2017, and this is now
+ checked by the header files.
+ [#1363](https://github.com/pybind/pybind11/pull/1363).
+- A few minor typo fixes and improvements to the test suite, and patches
+ that silence compiler warnings.
+- Vectors now support construction from generators, as well as
+ `extend()` from a list or generator.
+ [#1496](https://github.com/pybind/pybind11/pull/1496).
+
+## v2.2.3 (April 29, 2018)
+
+- The pybind11 header location detection was replaced by a new
+ implementation that no longer depends on `pip` internals (the recently
+ released `pip` 10 has restricted access to this API).
+ [#1190](https://github.com/pybind/pybind11/pull/1190).
+- Small adjustment to an implementation detail to work around a compiler
+ segmentation fault in Clang 3.3/3.4.
+ [#1350](https://github.com/pybind/pybind11/pull/1350).
+- The minimal supported version of the Intel compiler was \>= 17.0 since
+ pybind11 v2.1. This check is now explicit, and a compile-time error is
+ raised if the compiler meet the requirement.
+ [#1363](https://github.com/pybind/pybind11/pull/1363).
+- Fixed an endianness-related fault in the test suite.
+ [#1287](https://github.com/pybind/pybind11/pull/1287).
+
+## v2.2.2 (February 7, 2018)
+
+- Fixed a segfault when combining embedded interpreter
+ shutdown/reinitialization with external loaded pybind11 modules.
+ [#1092](https://github.com/pybind/pybind11/pull/1092).
+- Eigen support: fixed a bug where Nx1/1xN numpy inputs couldn't be
+ passed as arguments to Eigen vectors (which for Eigen are simply
+ compile-time fixed Nx1/1xN matrices).
+ [#1106](https://github.com/pybind/pybind11/pull/1106).
+- Clarified to license by moving the licensing of contributions from
+ `LICENSE` into `CONTRIBUTING.md`: the licensing of contributions is
+ not actually part of the software license as distributed. This isn't
+ meant to be a substantial change in the licensing of the project, but
+ addresses concerns that the clause made the license non-standard.
+ [#1109](https://github.com/pybind/pybind11/issues/1109).
+- Fixed a regression introduced in 2.1 that broke binding functions with
+ lvalue character literal arguments.
+ [#1128](https://github.com/pybind/pybind11/pull/1128).
+- MSVC: fix for compilation failures under /permissive-, and added the
+ flag to the appveyor test suite.
+ [#1155](https://github.com/pybind/pybind11/pull/1155).
+- Fixed `__qualname__` generation, and in turn, fixes how class names
+ (especially nested class names) are shown in generated docstrings.
+ [#1171](https://github.com/pybind/pybind11/pull/1171).
+- Updated the FAQ with a suggested project citation reference.
+ [#1189](https://github.com/pybind/pybind11/pull/1189).
+- Added fixes for deprecation warnings when compiled under C++17 with
+ `-Wdeprecated` turned on, and add `-Wdeprecated` to the test suite
+ compilation flags.
+ [#1191](https://github.com/pybind/pybind11/pull/1191).
+- Fixed outdated PyPI URLs in `setup.py`.
+ [#1213](https://github.com/pybind/pybind11/pull/1213).
+- Fixed a refcount leak for arguments that end up in a `py::args`
+ argument for functions with both fixed positional and `py::args`
+ arguments. [#1216](https://github.com/pybind/pybind11/pull/1216).
+- Fixed a potential segfault resulting from possible premature
+ destruction of `py::args`/`py::kwargs` arguments with overloaded
+ functions. [#1223](https://github.com/pybind/pybind11/pull/1223).
+- Fixed `del map[item]` for a `stl_bind.h` bound stl map.
+ [#1229](https://github.com/pybind/pybind11/pull/1229).
+- Fixed a regression from v2.1.x where the aggregate initialization
+ could unintentionally end up at a constructor taking a templated
+ `std::initializer_list` argument.
+ [#1249](https://github.com/pybind/pybind11/pull/1249).
+- Fixed an issue where calling a function with a keep_alive policy on
+ the same nurse/patient pair would cause the internal patient storage
+ to needlessly grow (unboundedly, if the nurse is long-lived).
+ [#1251](https://github.com/pybind/pybind11/issues/1251).
+- Various other minor fixes.
+
+## v2.2.1 (September 14, 2017)
+
+- Added `py::module_::reload()` member function for reloading a module.
+ [#1040](https://github.com/pybind/pybind11/pull/1040).
+- Fixed a reference leak in the number converter.
+ [#1078](https://github.com/pybind/pybind11/pull/1078).
+- Fixed compilation with Clang on host GCC \< 5 (old libstdc++ which
+ isn't fully C++11 compliant).
+ [#1062](https://github.com/pybind/pybind11/pull/1062).
+- Fixed a regression where the automatic `std::vector` caster
+ would fail to compile. The same fix also applies to any container
+ which returns element proxies instead of references.
+ [#1053](https://github.com/pybind/pybind11/pull/1053).
+- Fixed a regression where the `py::keep_alive` policy could not be
+ applied to constructors.
+ [#1065](https://github.com/pybind/pybind11/pull/1065).
+- Fixed a nullptr dereference when loading a `py::module_local` type
+ that's only registered in an external module.
+ [#1058](https://github.com/pybind/pybind11/pull/1058).
+- Fixed implicit conversion of accessors to types derived from
+ `py::object`. [#1076](https://github.com/pybind/pybind11/pull/1076).
+- The `name` in `PYBIND11_MODULE(name, variable)` can now be a macro.
+ [#1082](https://github.com/pybind/pybind11/pull/1082).
+- Relaxed overly strict `py::pickle()` check for matching get and set
+ types. [#1064](https://github.com/pybind/pybind11/pull/1064).
+- Conversion errors now try to be more informative when it's likely that
+ a missing header is the cause (e.g. forgetting ``).
+ [#1077](https://github.com/pybind/pybind11/pull/1077).
+
+## v2.2.0 (August 31, 2017)
+
+- Support for embedding the Python interpreter. See the
+ `documentation page ` for a full overview of the
+ new features. [#774](https://github.com/pybind/pybind11/pull/774),
+ [#889](https://github.com/pybind/pybind11/pull/889),
+ [#892](https://github.com/pybind/pybind11/pull/892),
+ [#920](https://github.com/pybind/pybind11/pull/920).
+
+ ```cpp
+ #include
+ namespace py = pybind11;
+
+ int main() {
+ py::scoped_interpreter guard{}; // start the interpreter and keep it alive
+
+ py::print("Hello, World!"); // use the Python API
+ }
+ ```
+
+- Support for inheriting from multiple C++ bases in Python.
+ [#693](https://github.com/pybind/pybind11/pull/693).
+
+ ```python
+ from cpp_module import CppBase1, CppBase2
+
+
+ class PyDerived(CppBase1, CppBase2):
+ def __init__(self):
+ CppBase1.__init__(self) # C++ bases must be initialized explicitly
+ CppBase2.__init__(self)
+ ```
+
+- `PYBIND11_MODULE` is now the preferred way to create module entry
+ points. `PYBIND11_PLUGIN` is deprecated. See `macros` for details.
+ [#879](https://github.com/pybind/pybind11/pull/879).
+
+ ```cpp
+ // new
+ PYBIND11_MODULE(example, m) {
+ m.def("add", [](int a, int b) { return a + b; });
+ }
+
+ // old
+ PYBIND11_PLUGIN(example) {
+ py::module m("example");
+ m.def("add", [](int a, int b) { return a + b; });
+ return m.ptr();
+ }
+ ```
+
+- pybind11's headers and build system now more strictly enforce hidden
+ symbol visibility for extension modules. This should be seamless for
+ most users, but see the `upgrade` if you use a custom build system.
+ [#995](https://github.com/pybind/pybind11/pull/995).
+
+- Support for `py::module_local` types which allow multiple modules to
+ export the same C++ types without conflicts. This is useful for opaque
+ types like `std::vector`. `py::bind_vector` and `py::bind_map`
+ now default to `py::module_local` if their elements are builtins or
+ local types. See `module_local` for details.
+ [#949](https://github.com/pybind/pybind11/pull/949),
+ [#981](https://github.com/pybind/pybind11/pull/981),
+ [#995](https://github.com/pybind/pybind11/pull/995),
+ [#997](https://github.com/pybind/pybind11/pull/997).
+
+- Custom constructors can now be added very easily using lambdas or
+ factory functions which return a class instance by value, pointer or
+ holder. This supersedes the old placement-new `__init__` technique.
+ See `custom_constructors` for details.
+ [#805](https://github.com/pybind/pybind11/pull/805),
+ [#1014](https://github.com/pybind/pybind11/pull/1014).
+
+ ```cpp
+ struct Example {
+ Example(std::string);
+ };
+
+ py::class_(m, "Example")
+ .def(py::init()) // existing constructor
+ .def(py::init([](int n) { // custom constructor
+ return std::make_unique(std::to_string(n));
+ }));
+ ```
+
+- Similarly to custom constructors, pickling support functions are now
+ bound using the `py::pickle()` adaptor which improves type safety. See
+ the `upgrade` and `pickling` for details.
+ [#1038](https://github.com/pybind/pybind11/pull/1038).
+
+- Builtin support for converting C++17 standard library types and
+ general conversion improvements:
+
+ 1. C++17 `std::variant` is supported right out of the box. C++11/14
+ equivalents (e.g. `boost::variant`) can also be added with a
+ simple user-defined specialization. See `cpp17_container_casters`
+ for details. [#811](https://github.com/pybind/pybind11/pull/811),
+ [#845](https://github.com/pybind/pybind11/pull/845),
+ [#989](https://github.com/pybind/pybind11/pull/989).
+ 2. Out-of-the-box support for C++17 `std::string_view`.
+ [#906](https://github.com/pybind/pybind11/pull/906).
+ 3. Improved compatibility of the builtin `optional` converter.
+ [#874](https://github.com/pybind/pybind11/pull/874).
+ 4. The `bool` converter now accepts `numpy.bool_` and types which
+ define `__bool__` (Python 3.x) or `__nonzero__` (Python 2.7).
+ [#925](https://github.com/pybind/pybind11/pull/925).
+ 5. C++-to-Python casters are now more efficient and move elements out
+ of rvalue containers whenever possible.
+ [#851](https://github.com/pybind/pybind11/pull/851),
+ [#936](https://github.com/pybind/pybind11/pull/936),
+ [#938](https://github.com/pybind/pybind11/pull/938).
+ 6. Fixed `bytes` to `std::string/char*` conversion on Python 3.
+ [#817](https://github.com/pybind/pybind11/pull/817).
+ 7. Fixed lifetime of temporary C++ objects created in Python-to-C++
+ conversions. [#924](https://github.com/pybind/pybind11/pull/924).
+
+- Scope guard call policy for RAII types, e.g.
+ `py::call_guard()`,
+ `py::call_guard()`. See `call_policies`
+ for details. [#740](https://github.com/pybind/pybind11/pull/740).
+
+- Utility for redirecting C++ streams to Python (e.g. `std::cout` -\>
+ `sys.stdout`). Scope guard `py::scoped_ostream_redirect` in C++ and a
+ context manager in Python. See `ostream_redirect`.
+ [#1009](https://github.com/pybind/pybind11/pull/1009).
+
+- Improved handling of types and exceptions across module boundaries.
+ [#915](https://github.com/pybind/pybind11/pull/915),
+ [#951](https://github.com/pybind/pybind11/pull/951),
+ [#995](https://github.com/pybind/pybind11/pull/995).
+
+- Fixed destruction order of `py::keep_alive` nurse/patient objects in
+ reference cycles.
+ [#856](https://github.com/pybind/pybind11/pull/856).
+
+- NumPy and buffer protocol related improvements:
+
+ 1. Support for negative strides in Python buffer objects/numpy
+ arrays. This required changing integers from unsigned to signed
+ for the related C++ APIs. Note: If you have compiler warnings
+ enabled, you may notice some new conversion warnings after
+ upgrading. These can be resolved with `static_cast`.
+ [#782](https://github.com/pybind/pybind11/pull/782).
+ 2. Support `std::complex` and arrays inside `PYBIND11_NUMPY_DTYPE`.
+ [#831](https://github.com/pybind/pybind11/pull/831),
+ [#832](https://github.com/pybind/pybind11/pull/832).
+ 3. Support for constructing `py::buffer_info` and `py::arrays` using
+ arbitrary containers or iterators instead of requiring a
+ `std::vector`.
+ [#788](https://github.com/pybind/pybind11/pull/788),
+ [#822](https://github.com/pybind/pybind11/pull/822),
+ [#860](https://github.com/pybind/pybind11/pull/860).
+ 4. Explicitly check numpy version and require \>= 1.7.0.
+ [#819](https://github.com/pybind/pybind11/pull/819).
+
+- Support for allowing/prohibiting `None` for specific arguments and
+ improved `None` overload resolution order. See `none_arguments` for
+ details. [#843](https://github.com/pybind/pybind11/pull/843).
+ [#859](https://github.com/pybind/pybind11/pull/859).
+
+- Added `py::exec()` as a shortcut for `py::eval()`
+ and support for C++11 raw string literals as input. See `eval`.
+ [#766](https://github.com/pybind/pybind11/pull/766),
+ [#827](https://github.com/pybind/pybind11/pull/827).
+
+- `py::vectorize()` ignores non-vectorizable arguments and supports
+ member functions.
+ [#762](https://github.com/pybind/pybind11/pull/762).
+
+- Support for bound methods as callbacks (`pybind11/functional.h`).
+ [#815](https://github.com/pybind/pybind11/pull/815).
+
+- Allow aliasing pybind11 methods: `cls.attr("foo") = cls.attr("bar")`.
+ [#802](https://github.com/pybind/pybind11/pull/802).
+
+- Don't allow mixed static/non-static overloads.
+ [#804](https://github.com/pybind/pybind11/pull/804).
+
+- Fixed overriding static properties in derived classes.
+ [#784](https://github.com/pybind/pybind11/pull/784).
+
+- Added support for write only properties.
+ [#1144](https://github.com/pybind/pybind11/pull/1144).
+
+- Improved deduction of member functions of a derived class when its
+ bases aren't registered with pybind11.
+ [#855](https://github.com/pybind/pybind11/pull/855).
+
+ ```cpp
+ struct Base {
+ int foo() { return 42; }
+ }
+
+ struct Derived : Base {}
+
+ // Now works, but previously required also binding `Base`
+ py::class_(m, "Derived")
+ .def("foo", &Derived::foo); // function is actually from `Base`
+ ```
+
+- The implementation of `py::init<>` now uses C++11 brace initialization
+ syntax to construct instances, which permits binding implicit
+ constructors of aggregate types.
+ [#1015](https://github.com/pybind/pybind11/pull/1015).
+
+ > ```cpp
+ > struct Aggregate {
+ > int a;
+ > std::string b;
+ > };
+ >
+ > py::class_(m, "Aggregate")
+ > .def(py::init());
+ > ```
+
+- Fixed issues with multiple inheritance with offset base/derived
+ pointers. [#812](https://github.com/pybind/pybind11/pull/812),
+ [#866](https://github.com/pybind/pybind11/pull/866),
+ [#960](https://github.com/pybind/pybind11/pull/960).
+
+- Fixed reference leak of type objects.
+ [#1030](https://github.com/pybind/pybind11/pull/1030).
+
+- Improved support for the `/std:c++14` and `/std:c++latest` modes on
+ MSVC 2017. [#841](https://github.com/pybind/pybind11/pull/841),
+ [#999](https://github.com/pybind/pybind11/pull/999).
+
+- Fixed detection of private operator new on MSVC.
+ [#893](https://github.com/pybind/pybind11/pull/893),
+ [#918](https://github.com/pybind/pybind11/pull/918).
+
+- Intel C++ compiler compatibility fixes.
+ [#937](https://github.com/pybind/pybind11/pull/937).
+
+- Fixed implicit conversion of `py::enum_` to integer types on Python
+ 2.7. [#821](https://github.com/pybind/pybind11/pull/821).
+
+- Added `py::hash` to fetch the hash value of Python objects, and
+ `.def(hash(py::self))` to provide the C++ `std::hash` as the Python
+ `__hash__` method.
+ [#1034](https://github.com/pybind/pybind11/pull/1034).
+
+- Fixed `__truediv__` on Python 2 and `__itruediv__` on Python 3.
+ [#867](https://github.com/pybind/pybind11/pull/867).
+
+- `py::capsule` objects now support the `name` attribute. This is useful
+ for interfacing with `scipy.LowLevelCallable`.
+ [#902](https://github.com/pybind/pybind11/pull/902).
+
+- Fixed `py::make_iterator`'s `__next__()` for past-the-end calls.
+ [#897](https://github.com/pybind/pybind11/pull/897).
+
+- Added `error_already_set::matches()` for checking Python exceptions.
+ [#772](https://github.com/pybind/pybind11/pull/772).
+
+- Deprecated `py::error_already_set::clear()`. It's no longer needed
+ following a simplification of the `py::error_already_set` class.
+ [#954](https://github.com/pybind/pybind11/pull/954).
+
+- Deprecated `py::handle::operator==()` in favor of `py::handle::is()`
+ [#825](https://github.com/pybind/pybind11/pull/825).
+
+- Deprecated `py::object::borrowed`/`py::object::stolen`. Use
+ `py::object::borrowed_t{}`/`py::object::stolen_t{}` instead.
+ [#771](https://github.com/pybind/pybind11/pull/771).
+
+- Changed internal data structure versioning to avoid conflicts between
+ modules compiled with different revisions of pybind11.
+ [#1012](https://github.com/pybind/pybind11/pull/1012).
+
+- Additional compile-time and run-time error checking and more
+ informative messages.
+ [#786](https://github.com/pybind/pybind11/pull/786),
+ [#794](https://github.com/pybind/pybind11/pull/794),
+ [#803](https://github.com/pybind/pybind11/pull/803).
+
+- Various minor improvements and fixes.
+ [#764](https://github.com/pybind/pybind11/pull/764),
+ [#791](https://github.com/pybind/pybind11/pull/791),
+ [#795](https://github.com/pybind/pybind11/pull/795),
+ [#840](https://github.com/pybind/pybind11/pull/840),
+ [#844](https://github.com/pybind/pybind11/pull/844),
+ [#846](https://github.com/pybind/pybind11/pull/846),
+ [#849](https://github.com/pybind/pybind11/pull/849),
+ [#858](https://github.com/pybind/pybind11/pull/858),
+ [#862](https://github.com/pybind/pybind11/pull/862),
+ [#871](https://github.com/pybind/pybind11/pull/871),
+ [#872](https://github.com/pybind/pybind11/pull/872),
+ [#881](https://github.com/pybind/pybind11/pull/881),
+ [#888](https://github.com/pybind/pybind11/pull/888),
+ [#899](https://github.com/pybind/pybind11/pull/899),
+ [#928](https://github.com/pybind/pybind11/pull/928),
+ [#931](https://github.com/pybind/pybind11/pull/931),
+ [#944](https://github.com/pybind/pybind11/pull/944),
+ [#950](https://github.com/pybind/pybind11/pull/950),
+ [#952](https://github.com/pybind/pybind11/pull/952),
+ [#962](https://github.com/pybind/pybind11/pull/962),
+ [#965](https://github.com/pybind/pybind11/pull/965),
+ [#970](https://github.com/pybind/pybind11/pull/970),
+ [#978](https://github.com/pybind/pybind11/pull/978),
+ [#979](https://github.com/pybind/pybind11/pull/979),
+ [#986](https://github.com/pybind/pybind11/pull/986),
+ [#1020](https://github.com/pybind/pybind11/pull/1020),
+ [#1027](https://github.com/pybind/pybind11/pull/1027),
+ [#1037](https://github.com/pybind/pybind11/pull/1037).
+
+- Testing improvements.
+ [#798](https://github.com/pybind/pybind11/pull/798),
+ [#882](https://github.com/pybind/pybind11/pull/882),
+ [#898](https://github.com/pybind/pybind11/pull/898),
+ [#900](https://github.com/pybind/pybind11/pull/900),
+ [#921](https://github.com/pybind/pybind11/pull/921),
+ [#923](https://github.com/pybind/pybind11/pull/923),
+ [#963](https://github.com/pybind/pybind11/pull/963).
+
+## v2.1.1 (April 7, 2017)
+
+- Fixed minimum version requirement for MSVC 2015u3
+ [#773](https://github.com/pybind/pybind11/pull/773).
+
+## v2.1.0 (March 22, 2017)
+
+- pybind11 now performs function overload resolution in two phases. The
+ first phase only considers exact type matches, while the second allows
+ for implicit conversions to take place. A special `noconvert()` syntax
+ can be used to completely disable implicit conversions for specific
+ arguments. [#643](https://github.com/pybind/pybind11/pull/643),
+ [#634](https://github.com/pybind/pybind11/pull/634),
+ [#650](https://github.com/pybind/pybind11/pull/650).
+- Fixed a regression where static properties no longer worked with
+ classes using multiple inheritance. The `py::metaclass` attribute is
+ no longer necessary (and deprecated as of this release) when binding
+ classes with static properties.
+ [#679](https://github.com/pybind/pybind11/pull/679),
+- Classes bound using `pybind11` can now use custom metaclasses.
+ [#679](https://github.com/pybind/pybind11/pull/679),
+- `py::args` and `py::kwargs` can now be mixed with other positional
+ arguments when binding functions using pybind11.
+ [#611](https://github.com/pybind/pybind11/pull/611).
+- Improved support for C++11 unicode string and character types; added
+ extensive documentation regarding pybind11's string conversion
+ behavior. [#624](https://github.com/pybind/pybind11/pull/624),
+ [#636](https://github.com/pybind/pybind11/pull/636),
+ [#715](https://github.com/pybind/pybind11/pull/715).
+- pybind11 can now avoid expensive copies when converting Eigen arrays
+ to NumPy arrays (and vice versa).
+ [#610](https://github.com/pybind/pybind11/pull/610).
+- The "fast path" in `py::vectorize` now works for any full-size group
+ of C or F-contiguous arrays. The non-fast path is also faster since it
+ no longer performs copies of the input arguments (except when type
+ conversions are necessary).
+ [#610](https://github.com/pybind/pybind11/pull/610).
+- Added fast, unchecked access to NumPy arrays via a proxy object.
+ [#746](https://github.com/pybind/pybind11/pull/746).
+- Transparent support for class-specific `operator new` and
+ `operator delete` implementations.
+ [#755](https://github.com/pybind/pybind11/pull/755).
+- Slimmer and more efficient STL-compatible iterator interface for
+ sequence types. [#662](https://github.com/pybind/pybind11/pull/662).
+- Improved custom holder type support.
+ [#607](https://github.com/pybind/pybind11/pull/607).
+- `nullptr` to `None` conversion fixed in various builtin type casters.
+ [#732](https://github.com/pybind/pybind11/pull/732).
+- `enum_` now exposes its members via a special `__members__` attribute.
+ [#666](https://github.com/pybind/pybind11/pull/666).
+- `std::vector` bindings created using `stl_bind.h` can now optionally
+ implement the buffer protocol.
+ [#488](https://github.com/pybind/pybind11/pull/488).
+- Automated C++ reference documentation using doxygen and breathe.
+ [#598](https://github.com/pybind/pybind11/pull/598).
+- Added minimum compiler version assertions.
+ [#727](https://github.com/pybind/pybind11/pull/727).
+- Improved compatibility with C++1z.
+ [#677](https://github.com/pybind/pybind11/pull/677).
+- Improved `py::capsule` API. Can be used to implement cleanup callbacks
+ that are involved at module destruction time.
+ [#752](https://github.com/pybind/pybind11/pull/752).
+- Various minor improvements and fixes.
+ [#595](https://github.com/pybind/pybind11/pull/595),
+ [#588](https://github.com/pybind/pybind11/pull/588),
+ [#589](https://github.com/pybind/pybind11/pull/589),
+ [#603](https://github.com/pybind/pybind11/pull/603),
+ [#619](https://github.com/pybind/pybind11/pull/619),
+ [#648](https://github.com/pybind/pybind11/pull/648),
+ [#695](https://github.com/pybind/pybind11/pull/695),
+ [#720](https://github.com/pybind/pybind11/pull/720),
+ [#723](https://github.com/pybind/pybind11/pull/723),
+ [#729](https://github.com/pybind/pybind11/pull/729),
+ [#724](https://github.com/pybind/pybind11/pull/724),
+ [#742](https://github.com/pybind/pybind11/pull/742),
+ [#753](https://github.com/pybind/pybind11/pull/753).
+
+## v2.0.1 (Jan 4, 2017)
+
+- Fix pointer to reference error in type_caster on MSVC
+ [#583](https://github.com/pybind/pybind11/pull/583).
+- Fixed a segmentation in the test suite due to a typo
+ [cd7eac](https://github.com/pybind/pybind11/commit/cd7eac).
+
+## v2.0.0 (Jan 1, 2017)
+
+- Fixed a reference counting regression affecting types with custom
+ metaclasses (introduced in v2.0.0-rc1).
+ [#571](https://github.com/pybind/pybind11/pull/571).
+- Quenched a CMake policy warning.
+ [#570](https://github.com/pybind/pybind11/pull/570).
+
+## v2.0.0-rc1 (Dec 23, 2016)
+
+The pybind11 developers are excited to issue a release candidate of
+pybind11 with a subsequent v2.0.0 release planned in early January next
+year.
+
+An incredible amount of effort by went into pybind11 over the last ~5
+months, leading to a release that is jam-packed with exciting new
+features and numerous usability improvements. The following list links
+PRs or individual commits whenever applicable.
+
+Happy Christmas!
+
+- Support for binding C++ class hierarchies that make use of multiple
+ inheritance. [#410](https://github.com/pybind/pybind11/pull/410).
+
+- PyPy support: pybind11 now supports nightly builds of PyPy and will
+ interoperate with the future 5.7 release. No code changes are
+ necessary, everything "just" works as usual. Note that we only target
+ the Python 2.7 branch for now; support for 3.x will be added once its
+ `cpyext` extension support catches up. A few minor features remain
+ unsupported for the time being (notably dynamic attributes in custom
+ types). [#527](https://github.com/pybind/pybind11/pull/527).
+
+- Significant work on the documentation -- in particular, the monolithic
+ `advanced.rst` file was restructured into a easier to read
+ hierarchical organization.
+ [#448](https://github.com/pybind/pybind11/pull/448).
+
+- Many NumPy-related improvements:
+
+ 1. Object-oriented API to access and modify NumPy `ndarray`
+ instances, replicating much of the corresponding NumPy C API
+ functionality.
+ [#402](https://github.com/pybind/pybind11/pull/402).
+
+ 2. NumPy array `dtype` array descriptors are now first-class citizens
+ and are exposed via a new class `py::dtype`.
+
+ 3. Structured dtypes can be registered using the
+ `PYBIND11_NUMPY_DTYPE()` macro. Special `array` constructors
+ accepting dtype objects were also added.
+
+ One potential caveat involving this change: format descriptor
+ strings should now be accessed via `format_descriptor::format()`
+ (however, for compatibility purposes, the old syntax
+ `format_descriptor::value` will still work for non-structured data
+ types). [#308](https://github.com/pybind/pybind11/pull/308).
+
+ 4. Further improvements to support structured dtypes throughout the
+ system. [#472](https://github.com/pybind/pybind11/pull/472),
+ [#474](https://github.com/pybind/pybind11/pull/474),
+ [#459](https://github.com/pybind/pybind11/pull/459),
+ [#453](https://github.com/pybind/pybind11/pull/453),
+ [#452](https://github.com/pybind/pybind11/pull/452), and
+ [#505](https://github.com/pybind/pybind11/pull/505).
+
+ 5. Fast access operators.
+ [#497](https://github.com/pybind/pybind11/pull/497).
+
+ 6. Constructors for arrays whose storage is owned by another object.
+ [#440](https://github.com/pybind/pybind11/pull/440).
+
+ 7. Added constructors for `array` and `array_t` explicitly accepting
+ shape and strides; if strides are not provided, they are deduced
+ assuming C-contiguity. Also added simplified constructors for
+ 1-dimensional case.
+
+ 8. Added buffer/NumPy support for `char[N]` and `std::array`
+ types.
+
+ 9. Added `memoryview` wrapper type which is constructible from
+ `buffer_info`.
+
+- Eigen: many additional conversions and support for non-contiguous
+ arrays/slices. [#427](https://github.com/pybind/pybind11/pull/427),
+ [#315](https://github.com/pybind/pybind11/pull/315),
+ [#316](https://github.com/pybind/pybind11/pull/316),
+ [#312](https://github.com/pybind/pybind11/pull/312), and
+ [#267](https://github.com/pybind/pybind11/pull/267)
+
+- Incompatible changes in `class_<...>::class_()`:
+
+ > 1. Declarations of types that provide access via the buffer
+ > protocol must now include the `py::buffer_protocol()` annotation
+ > as an argument to the `class_` constructor.
+ > 2. Declarations of types that require a custom metaclass (i.e. all
+ > classes which include static properties via commands such as
+ > `def_readwrite_static()`) must now include the `py::metaclass()`
+ > annotation as an argument to the `class_` constructor.
+ >
+ > These two changes were necessary to make type definitions in
+ > pybind11 future-proof, and to support PyPy via its cpyext
+ > mechanism. [#527](https://github.com/pybind/pybind11/pull/527).
+ >
+ > 3. This version of pybind11 uses a redesigned mechanism for
+ > instantiating trampoline classes that are used to override
+ > virtual methods from within Python. This led to the following
+ > user-visible syntax change: instead of
+ >
+ > ```cpp
+ > py::class_("MyClass")
+ > .alias()
+ > ....
+ > ```
+ >
+ > write
+ >
+ > ```cpp
+ > py::class_("MyClass")
+ > ....
+ > ```
+ >
+ > Importantly, both the original and the trampoline class are now
+ > specified as an arguments (in arbitrary order) to the
+ > `py::class_` template, and the `alias<..>()` call is gone. The
+ > new scheme has zero overhead in cases when Python doesn't
+ > override any functions of the underlying C++ class. [rev.
+ > 86d825](https://github.com/pybind/pybind11/commit/86d825).
+
+- Added `eval` and `eval_file` functions for evaluating expressions and
+ statements from a string or file. [rev.
+ 0d3fc3](https://github.com/pybind/pybind11/commit/0d3fc3).
+
+- pybind11 can now create types with a modifiable dictionary.
+ [#437](https://github.com/pybind/pybind11/pull/437) and
+ [#444](https://github.com/pybind/pybind11/pull/444).
+
+- Support for translation of arbitrary C++ exceptions to Python
+ counterparts. [#296](https://github.com/pybind/pybind11/pull/296) and
+ [#273](https://github.com/pybind/pybind11/pull/273).
+
+- Report full backtraces through mixed C++/Python code, better reporting
+ for import errors, fixed GIL management in exception processing.
+ [#537](https://github.com/pybind/pybind11/pull/537),
+ [#494](https://github.com/pybind/pybind11/pull/494), [rev.
+ e72d95](https://github.com/pybind/pybind11/commit/e72d95), and [rev.
+ 099d6e](https://github.com/pybind/pybind11/commit/099d6e).
+
+- Support for bit-level operations, comparisons, and serialization of
+ C++ enumerations.
+ [#503](https://github.com/pybind/pybind11/pull/503),
+ [#508](https://github.com/pybind/pybind11/pull/508),
+ [#380](https://github.com/pybind/pybind11/pull/380),
+ [#309](https://github.com/pybind/pybind11/pull/309).
+ [#311](https://github.com/pybind/pybind11/pull/311).
+
+- The `class_` constructor now accepts its template arguments in any
+ order. [#385](https://github.com/pybind/pybind11/pull/385).
+
+- Attribute and item accessors now have a more complete interface which
+ makes it possible to chain attributes as in
+ `obj.attr("a")[key].attr("b").attr("method")(1, 2, 3)`.
+ [#425](https://github.com/pybind/pybind11/pull/425).
+
+- Major redesign of the default and conversion constructors in
+ `pytypes.h`. [#464](https://github.com/pybind/pybind11/pull/464).
+
+- Added built-in support for `std::shared_ptr` holder type. It is no
+ longer necessary to to include a declaration of the form
+ `PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr)` (though
+ continuing to do so won't cause an error).
+ [#454](https://github.com/pybind/pybind11/pull/454).
+
+- New `py::overload_cast` casting operator to select among multiple
+ possible overloads of a function. An example:
+
+ > ```cpp
+ > py::class_(m, "Pet")
+ > .def("set", py::overload_cast(&Pet::set), "Set the pet's age")
+ > .def("set", py::overload_cast(&Pet::set), "Set the pet's name");
+ > ```
+
+ This feature only works on C++14-capable compilers.
+ [#541](https://github.com/pybind/pybind11/pull/541).
+
+- C++ types are automatically cast to Python types, e.g. when assigning
+ them as an attribute. For instance, the following is now legal:
+
+ > ```cpp
+ > py::module m = /* ... */
+ > m.attr("constant") = 123;
+ > ```
+
+ (Previously, a `py::cast` call was necessary to avoid a compilation
+ error.) [#551](https://github.com/pybind/pybind11/pull/551).
+
+- Redesigned `pytest`-based test suite.
+ [#321](https://github.com/pybind/pybind11/pull/321).
+
+- Instance tracking to detect reference leaks in test suite.
+ [#324](https://github.com/pybind/pybind11/pull/324)
+
+- pybind11 can now distinguish between multiple different instances that
+ are located at the same memory address, but which have different
+ types. [#329](https://github.com/pybind/pybind11/pull/329).
+
+- Improved logic in `move` return value policy.
+ [#510](https://github.com/pybind/pybind11/pull/510),
+ [#297](https://github.com/pybind/pybind11/pull/297).
+
+- Generalized unpacking API to permit calling Python functions from C++
+ using notation such as
+ `foo(a1, a2, *args, "ka"_a=1, "kb"_a=2, **kwargs)`.
+ [#372](https://github.com/pybind/pybind11/pull/372).
+
+- `py::print()` function whose behavior matches that of the native
+ Python `print()` function.
+ [#372](https://github.com/pybind/pybind11/pull/372).
+
+- Added `py::dict` keyword
+ constructor:`auto d = dict("number"_a=42, "name"_a="World");`.
+ [#372](https://github.com/pybind/pybind11/pull/372).
+
+- Added `py::str::format()` method and `_s` literal:
+ `py::str s = "1 + 2 = {}"_s.format(3);`.
+ [#372](https://github.com/pybind/pybind11/pull/372).
+
+- Added `py::repr()` function which is equivalent to Python's builtin
+ `repr()`. [#333](https://github.com/pybind/pybind11/pull/333).
+
+- Improved construction and destruction logic for holder types. It is
+ now possible to reference instances with smart pointer holder types
+ without constructing the holder if desired. The
+ `PYBIND11_DECLARE_HOLDER_TYPE` macro now accepts an optional second
+ parameter to indicate whether the holder type uses intrusive reference
+ counting. [#533](https://github.com/pybind/pybind11/pull/533) and
+ [#561](https://github.com/pybind/pybind11/pull/561).
+
+- Mapping a stateless C++ function to Python and back is now "for free"
+ (i.e. no extra indirections or argument conversion overheads). [rev.
+ 954b79](https://github.com/pybind/pybind11/commit/954b79).
+
+- Bindings for `std::valarray`.
+ [#545](https://github.com/pybind/pybind11/pull/545).
+
+- Improved support for C++17 capable compilers.
+ [#562](https://github.com/pybind/pybind11/pull/562).
+
+- Bindings for `std::optional`.
+ [#475](https://github.com/pybind/pybind11/pull/475),
+ [#476](https://github.com/pybind/pybind11/pull/476),
+ [#479](https://github.com/pybind/pybind11/pull/479),
+ [#499](https://github.com/pybind/pybind11/pull/499), and
+ [#501](https://github.com/pybind/pybind11/pull/501).
+
+- `stl_bind.h`: general improvements and support for `std::map` and
+ `std::unordered_map`.
+ [#490](https://github.com/pybind/pybind11/pull/490),
+ [#282](https://github.com/pybind/pybind11/pull/282),
+ [#235](https://github.com/pybind/pybind11/pull/235).
+
+- The `std::tuple`, `std::pair`, `std::list`, and `std::vector` type
+ casters now accept any Python sequence type as input. [rev.
+ 107285](https://github.com/pybind/pybind11/commit/107285).
+
+- Improved CMake Python detection on multi-architecture Linux.
+ [#532](https://github.com/pybind/pybind11/pull/532).
+
+- Infrastructure to selectively disable or enable parts of the
+ automatically generated docstrings.
+ [#486](https://github.com/pybind/pybind11/pull/486).
+
+- `reference` and `reference_internal` are now the default return value
+ properties for static and non-static properties, respectively.
+ [#473](https://github.com/pybind/pybind11/pull/473). (the previous
+ defaults were `automatic`).
+ [#473](https://github.com/pybind/pybind11/pull/473).
+
+- Support for `std::unique_ptr` with non-default deleters or no deleter
+ at all (`py::nodelete`).
+ [#384](https://github.com/pybind/pybind11/pull/384).
+
+- Deprecated `handle::call()` method. The new syntax to call Python
+ functions is simply `handle()`. It can also be invoked explicitly via
+ `handle::operator()`, where `X` is an optional return value policy.
+
+- Print more informative error messages when `make_tuple()` or `cast()`
+ fail. [#262](https://github.com/pybind/pybind11/pull/262).
+
+- Creation of holder types for classes deriving from
+ `std::enable_shared_from_this<>` now also works for `const` values.
+ [#260](https://github.com/pybind/pybind11/pull/260).
+
+- `make_iterator()` improvements for better compatibility with various
+ types (now uses prefix increment operator); it now also accepts
+ iterators with different begin/end types as long as they are equality
+ comparable. [#247](https://github.com/pybind/pybind11/pull/247).
+
+- `arg()` now accepts a wider range of argument types for default
+ values. [#244](https://github.com/pybind/pybind11/pull/244).
+
+- Support `keep_alive` where the nurse object may be `None`.
+ [#341](https://github.com/pybind/pybind11/pull/341).
+
+- Added constructors for `str` and `bytes` from zero-terminated char
+ pointers, and from char pointers and length. Added constructors for
+ `str` from `bytes` and for `bytes` from `str`, which will perform
+ UTF-8 decoding/encoding as required.
+
+- Many other improvements of library internals without user-visible
+ changes
+
+## 1.8.1 (July 12, 2016)
+
+- Fixed a rare but potentially very severe issue when the garbage
+ collector ran during pybind11 type creation.
+
+## 1.8.0 (June 14, 2016)
+
+- Redesigned CMake build system which exports a convenient
+ `pybind11_add_module` function to parent projects.
+- `std::vector<>` type bindings analogous to Boost.Python's
+ `indexing_suite`
+- Transparent conversion of sparse and dense Eigen matrices and vectors
+ (`eigen.h`)
+- Added an `ExtraFlags` template argument to the NumPy `array_t<>`
+ wrapper to disable an enforced cast that may lose precision, e.g. to
+ create overloads for different precisions and complex vs real-valued
+ matrices.
+- Prevent implicit conversion of floating point values to integral types
+ in function arguments
+- Fixed incorrect default return value policy for functions returning a
+ shared pointer
+- Don't allow registering a type via `class_` twice
+- Don't allow casting a `None` value into a C++ lvalue reference
+- Fixed a crash in `enum_::operator==` that was triggered by the
+ `help()` command
+- Improved detection of whether or not custom C++ types can be
+ copy/move-constructed
+- Extended `str` type to also work with `bytes` instances
+- Added a `"name"_a` user defined string literal that is equivalent to
+ `py::arg("name")`.
+- When specifying function arguments via `py::arg`, the test that
+ verifies the number of arguments now runs at compile time.
+- Added `[[noreturn]]` attribute to `pybind11_fail()` to quench some
+ compiler warnings
+- List function arguments in exception text when the dispatch code
+ cannot find a matching overload
+- Added `PYBIND11_OVERLOAD_NAME` and `PYBIND11_OVERLOAD_PURE_NAME`
+ macros which can be used to override virtual methods whose name
+ differs in C++ and Python (e.g. `__call__` and `operator()`)
+- Various minor `iterator` and `make_iterator()` improvements
+- Transparently support `__bool__` on Python 2.x and Python 3.x
+- Fixed issue with destructor of unpickled object not being called
+- Minor CMake build system improvements on Windows
+- New `pybind11::args` and `pybind11::kwargs` types to create functions
+ which take an arbitrary number of arguments and keyword arguments
+- New syntax to call a Python function from C++ using `*args` and
+ `*kwargs`
+- The functions `def_property_*` now correctly process docstring
+ arguments (these formerly caused a segmentation fault)
+- Many `mkdoc.py` improvements (enumerations, template arguments,
+ `DOC()` macro accepts more arguments)
+- Cygwin support
+- Documentation improvements (pickling support, `keep_alive`, macro
+ usage)
+
+## 1.7 (April 30, 2016)
+
+- Added a new `move` return value policy that triggers C++11 move
+ semantics. The automatic return value policy falls back to this case
+ whenever a rvalue reference is encountered
+- Significantly more general GIL state routines that are used instead of
+ Python's troublesome `PyGILState_Ensure` and `PyGILState_Release` API
+- Redesign of opaque types that drastically simplifies their usage
+- Extended ability to pass values of type `[const] void *`
+- `keep_alive` fix: don't fail when there is no patient
+- `functional.h`: acquire the GIL before calling a Python function
+- Added Python RAII type wrappers `none` and `iterable`
+- Added `*args` and `*kwargs` pass-through parameters to
+ `pybind11.get_include()` function
+- Iterator improvements and fixes
+- Documentation on return value policies and opaque types improved
+
+## 1.6 (April 30, 2016)
+
+- Skipped due to upload to PyPI gone wrong and inability to recover
+ ()
+
+## 1.5 (April 21, 2016)
+
+- For polymorphic types, use RTTI to try to return the closest type
+ registered with pybind11
+- Pickling support for serializing and unserializing C++ instances to a
+ byte stream in Python
+- Added a convenience routine `make_iterator()` which turns a range
+ indicated by a pair of C++ iterators into a iterable Python object
+- Added `len()` and a variadic `make_tuple()` function
+- Addressed a rare issue that could confuse the current virtual function
+ dispatcher and another that could lead to crashes in multi-threaded
+ applications
+- Added a `get_include()` function to the Python module that returns the
+ path of the directory containing the installed pybind11 header files
+- Documentation improvements: import issues, symbol visibility,
+ pickling, limitations
+- Added casting support for `std::reference_wrapper<>`
+
+## 1.4 (April 7, 2016)
+
+- Transparent type conversion for `std::wstring` and `wchar_t`
+- Allow passing `nullptr`-valued strings
+- Transparent passing of `void *` pointers using capsules
+- Transparent support for returning values wrapped in
+ `std::unique_ptr<>`
+- Improved docstring generation for compatibility with Sphinx
+- Nicer debug error message when default parameter construction fails
+- Support for "opaque" types that bypass the transparent conversion
+ layer for STL containers
+- Redesigned type casting interface to avoid ambiguities that could
+ occasionally cause compiler errors
+- Redesigned property implementation; fixes crashes due to an
+ unfortunate default return value policy
+- Anaconda package generation support
+
+## 1.3 (March 8, 2016)
+
+- Added support for the Intel C++ compiler (v15+)
+- Added support for the STL unordered set/map data structures
+- Added support for the STL linked list data structure
+- NumPy-style broadcasting support in `pybind11::vectorize`
+- pybind11 now displays more verbose error messages when
+ `arg::operator=()` fails
+- pybind11 internal data structures now live in a version-dependent
+ namespace to avoid ABI issues
+- Many, many bugfixes involving corner cases and advanced usage
+
+## 1.2 (February 7, 2016)
+
+- Optional: efficient generation of function signatures at compile time
+ using C++14
+- Switched to a simpler and more general way of dealing with function
+ default arguments. Unused keyword arguments in function calls are now
+ detected and cause errors as expected
+- New `keep_alive` call policy analogous to Boost.Python's
+ `with_custodian_and_ward`
+- New `pybind11::base<>` attribute to indicate a subclass relationship
+- Improved interface for RAII type wrappers in `pytypes.h`
+- Use RAII type wrappers consistently within pybind11 itself. This fixes
+ various potential refcount leaks when exceptions occur
+- Added new `bytes` RAII type wrapper (maps to `string` in Python 2.7)
+- Made handle and related RAII classes const correct, using them more
+ consistently everywhere now
+- Got rid of the ugly `__pybind11__` attributes on the Python
+ side---they are now stored in a C++ hash table that is not visible in
+ Python
+- Fixed refcount leaks involving NumPy arrays and bound functions
+- Vastly improved handling of shared/smart pointers
+- Removed an unnecessary copy operation in `pybind11::vectorize`
+- Fixed naming clashes when both pybind11 and NumPy headers are included
+- Added conversions for additional exception types
+- Documentation improvements (using multiple extension modules, smart
+ pointers, other minor clarifications)
+- unified infrastructure for parsing variadic arguments in `class_` and
+ cpp_function
+- Fixed license text (was: ZLIB, should have been: 3-clause BSD)
+- Python 3.2 compatibility
+- Fixed remaining issues when accessing types in another plugin module
+- Added enum comparison and casting methods
+- Improved SFINAE-based detection of whether types are
+ copy-constructible
+- Eliminated many warnings about unused variables and the use of
+ `offsetof()`
+- Support for `std::array<>` conversions
+
+## 1.1 (December 7, 2015)
+
+- Documentation improvements (GIL, wrapping functions, casting, fixed
+ many typos)
+- Generalized conversion of integer types
+- Improved support for casting function objects
+- Improved support for `std::shared_ptr<>` conversions
+- Initial support for `std::set<>` conversions
+- Fixed type resolution issue for types defined in a separate plugin
+ module
+- CMake build system improvements
+- Factored out generic functionality to non-templated code (smaller code
+ size)
+- Added a code size / compile time benchmark vs Boost.Python
+- Added an appveyor CI script
+
+## 1.0 (October 15, 2015)
+
+- Initial release
diff --git a/docs/changelog.rst b/docs/changelog.rst
deleted file mode 100644
index d300fa303..000000000
--- a/docs/changelog.rst
+++ /dev/null
@@ -1,3568 +0,0 @@
-.. _changelog:
-
-Changelog
-#########
-
-Starting with version 1.8.0, pybind11 releases use a `semantic versioning
-`_ policy.
-
-Changes will be added here periodically from the "Suggested changelog entry"
-block in pull request descriptions.
-
-
-3.0.0 RC 1
-----------
-
-We may add one more opt-in feature (embedded subinterperters) before the final
-release.
-
-New Features:
-
-* The ``smart-holder`` branch has been merged, enabling ``py::class_``, which handles two-way conversion with
- ``std::unique_ptr`` and ``std::shared_ptr`` (simultaneously), disowning
- a Python object being passed to ``std::unique_ptr``, trampoline objects,
- and ``std::enable_shared_from_this``.
- `#5542 `_
-
-* Changed ``PYBIND11_MODULE`` macro implementation to perform multi-phase
- module initialization (PEP 489) behind the scenes.
- `#5574 `_
-
-* Support for sub-interpreters (both isolated (with separate GILs) and legacy
- (with a global GIL). Add the
- ``py::multiple_interpreters::per_interpreter_gil()`` tag (or,
- ``py::multiple_interpreters::shared_gil()`` for legacy interpreter support)
- to ``PYBIND11_MODULE`` calls (as the third parameter) to indicate that a
- module supports running with sub-interpreters.
- `#5564 `_
-
-* Changed ``PYBIND11_EMBEDDED_MODULE`` macro implementation to perform
- multi-phase module initialization (PEP 489) behind the scenes and to support
- ``py::mod_gil_not_used()``, ``py::multiple_interpreters::per_interpreter_gil()``
- and ``py::multiple_interpreters::shared_gil()``.
- `#5665 `_
-
-* ``py::native_enum`` was added, for conversions between Python's native (stdlib) enum types and C++ enums.
- `#5555 `_
-
- * Add class doc string to ``py::native_enum``.
- `#5617 `_.
-
- * Fix signature for functions with a native_enum in the signature.
- `#5619 `_
-
-* A ``py::release_gil_before_calling_cpp_dtor`` option (for ``py::class_``) was
- added to resolve the long-standing issue #1446.
- `#5522 `_
-
-* Add ``dtype::normalized_num`` and ``dtype::num_of``.
- `#5429 `_
-
-* Add support for ``array_t`` and ``array_t``.
- `#5427 `_
-
-* Added ``py::warnings`` namespace with ``py::warnings::warn`` and
- ``py::warnings::new_warning_type`` that provides the interface for Python
- warnings.
- `#5291 `_
-
-* stl.h ``list|set|map_caster`` were made more user friendly: it is no longer
- necessary to explicitly convert Python iterables to ``tuple()``, ``set()``,
- or ``map()`` in many common situations.
- `#4686 `_
-
-* The ``array_caster`` in pybind11/stl.h was enhanced to support value types that are not default-constructible.
- `#5305 `_
-
-* ``pybind11/conduit/pybind11_platform_abi_id.h`` was factored out, to maximize
- reusability of ``PYBIND11_PLATFORM_ABI_ID`` (for other Python/C++ binding
- systems).
- `#5375 `_
-
-* Added support for finding pybind11 using pkgconf distributed on pypi.
- `#5552 `_
-
-* Support ``--extension-suffix`` on the pybind11 command.
- `#5360 `_
-
-* Add semi-public API: ``pybind11::detail::is_holder_constructed`` and update
- example for ``pybind11::custom_type_setup`` in documentation.
- `#5669 `_
-
-
-New Features (typing):
-
-* Added option for different arg/return type hints to ``type_caster``. Updated
- ``stl/filesystem`` to use correct arg/return type hints. Updated
- ``pybind11::typing`` to use correct arg/return type hints for nested types.
- `#5450 `_
-
-* Updated type hint for ``py::capsule`` to ``type.CapsuleType``.
- `#5567 `_
-
-* Adds support for ``typing.SupportsInt`` and ``typing.SupportsFloat``.
- Update ``Final`` to be narrower type hint. Make ``std::function`` match
- ``Callable`` type. Fix ``io_name`` bug in ``attr_with_type_hint``.
- `#5540 `_
-
-* Rework of arg/return type hints to support ``.noconvert()``.
- `#5486 `_
-
-* Add ``attr_with_type`` for declaring attribute types and ``Final``, ``ClassVar`` type annotations.
- `#5460 `_
-
-* Allow annotate methods with ``py::pos_only`` when only have the ``self``
- argument. Make arguments for auto-generated dunder methods positional-only.
- `#5403 `_
-
-* Added ``py::Args`` and ``py::KWArgs`` to enable custom type hinting of ``*args`` and ``**kwargs`` (see PEP 484).
- `#5357 `_
-
-* Switched to ``numpy.typing.NDArray`` and ``numpy.typing.ArrayLike``.
- `#5212 `_
-
-.. fix(types)
-
-* Use ``numpy.object_`` instead of ``object``.
- `#5571 `_
-
-* Fix module type hint.
- `#5469 `_
-
-* Fix Buffer type hint.
- `#5662 `_
-
-* Added support for ``collections.abc`` in type hints and convertible checks of STL casters and ``py::buffer``.
- `#5566 `_
-
-
-Removals:
-
-* Remove support for pybind11 v2 internals versions (4, 5, 6).
- (The internals version number has been bumped for pybind11 v3.)
- `#5512 `_ |
- `#5530 `_
-
-* Remove ``make_simple_namespace`` (added in 2.8.0, deprecated in 2.8.1).
- `#5597 `_
-
-* Legacy-mode option ``PYBIND11_NUMPY_1_ONLY`` has been removed.
- `#5595 `_
-
-* Add a deprecation warning to ``.get_type`` (deprecated in pybind11 2.6 in 2020).
- `#5596 `_
-
-
-Bug fixes:
-
-* Set ``__file__`` on submodules.
- `#5584 `_. Except on embedded modules. `#5650 `_
-
-* pybind11-bound functions are now pickleable.
- `#5580 `_
-
-* Fix bug in ``attr_with_type_hint`` to allow objects to be in ``attr_with_type_hint``.
- `#5576 `_
-
-* A ``-Wmaybe-uninitialized`` warning suppression was added in ``pybind11/eigen/matrix.h``.
- `#5516 `_
-
-* ``PYBIND11_WARNING_POP`` was incorrectly defined as ``PYBIND11_PRAGMA(clang diagnostic push)``.
- `#5448 `_
-
-* ``PYBIND11_PLATFORM_ABI_ID`` (which is used in composing ``PYBIND11_INTERNALS_ID``) was modernized to reflect actual ABI compatibility more accurately.
- `#4953 `_ |
- `#5439 `_
-
-* Fix buffer protocol implementation.
- `#5407 `_
-
-* Fix iterator increment operator does not skip first item.
- `#5400 `_
-
-* When getting or deleting an element in a container bound by ``bind_map``, print the key in ``KeyError`` if it does not exist.
- `#5397 `_
-
-* ``pybind11::builtin_exception`` is now explicitly exported when linked to libc++.
- `#5390 `_
-
-* Allow subclasses of ``py::args`` and ``py::kwargs``.
- `#5381 `_
-
-* Disable false-positive GCC 12 Bound Check warning.
- `#5355 `_
-
-* fix: using ``__cpp_nontype_template_args`` instead of ``__cpp_nontype_template_parameter_class``.
- `#5330 `_
-
-* Properly translate C++ exception to Python exception when creating Python buffer from wrapped object.
- `#5324 `_
-
-* Update the dict when restoring pickles, instead of assigning a replacement dict.
- `#5658 `_
-
-* Properly define ``_DEBUG`` macro to ``1`` instead of defining it without value.
- `#5639 `_
-
-* Fix a missing time cast causing a compile error for newer ICC.
- `#5621 `_
-
-* Change the behavior of the default constructor of ``py::slice`` to be equivalent to ``::`` in Python.
- `#5620 `_
-
-
-Bug fixes (CMake):
-
-* (CMake) Enable FindPython mode by default, with a ``COMPAT`` mode that sets
- some of the old variables to ease transition.
- `#5553 `_
-
-* Add an author warning that auto-calculated ``PYTHON_MODULE_EXTENSION`` may not respect ``SETUPTOOLS_EXT_SUFFIX`` during cross-compilation.
- `#5495 `_
-
-* Don't strip with ``CMAKE_BUILD_TYPE`` None.
- `#5392 `_
-
-* Fix an issue with ``NO_EXTRAS`` adding ``pybind11::windows_extras`` anyway.
- `#5378 `_
-
-* Fix issue with NEW/OLD message showing up.
- `#5656 `_
-
-* Use CMake's warnings as errors if available (CMake 3.24+).
- `#5612 `_
-
-* Add support for running pybind11's tests via presets in CMake 3.25+.
- `#5655 `_
-
-* Restructure venv support to support ``--fresh``, make in build folder.
- `#5668 `_
-
-
-Bug fixes (free-threading):
-
-* Fix data race in free threaded CPython when accessing a shared static variable.
- `#5494 `_
-
-* A free-threading data race in ``all_type_info()`` was fixed.
- `#5419 `_
-
-* Added exception translator specific mutex used with ``try_translate_exceptions`` in the free-threaded build for internal locking.
- `#5362 `_
-
-
-Internals:
-
-* Consolidated all ``PYBIND11_HAS_...`` feature macros into ``pybind11/detail/common.h`` to streamline backward compatibility checks and simplify internal refactoring. This change ensures
-consistent macro availability regardless of header inclusion order.
- `#5647 `_
-
-* ``pybind11/gil_simple.h`` was factored out from ``pybind11/gil.h``, so that it can easily be reused.
- `#5614 `_
-
-
-Documentation:
-
-* Improved ``reference_internal`` policy documentation.
- `#5528 `_
-
-* A new "Double locking, deadlocking, GIL" document was added.
- `#5394 `_
-
-* Adds an answer (FAQ) for "What is a highly conclusive and simple way to find memory leaks?".
- `#5340 `_
-
-* Add documenting for free-threading and subinterpreters.
- `#5659 `_
-
-
-Tests:
-
-* Download the final Catch2 2.x release if Catch download is requested.
- `#5568 `_
-
-* Explicitly used ``signed char`` for two numpy dtype tests. As seen when
-compiling using ``clang`` on Linux with the ``-funsigned-char`` flag.
- `#5545 `_
-
-* Test PyPy3.11 in CI.
- `#5534 `_
-
-* CI testing now includes ``-Wwrite-strings -Wunreachable-code -Wpointer-arith -Wredundant-decls`` in some jobs.
- `#5523 `_
-
-
-New and removed platforms:
-
-* Support Python 3.14 (beta 1).
- `#5646 `_
-
-* Added support for GraalPy Python implementation (https://github.com/oracle/graalpython).
- `#5380 `_
-
-* Support for PyPy 3.11 added.
- `#5508 `_
-
-* Support for PyPy 3.8 and 3.9 was dropped.
- `#5578 `_
-
-* Support for Python 3.7 was removed. (Official end-of-life: 2023-06-27).
- `#5191 `_
-
-* Support for CMake older than 3.15 removed. CMake 3.15-4.0 supported.
- `#5304 `_
-
-* Use scikit-build-core for the build backend for the PyPI ``pybind11``. The CMake generation has been moved to the sdist->wheel step. ``PYBIND11_GLOBAL_PREFIX`` has been removed.
- `#5598 `_
-
-
-Version 2.13.6 (September 13, 2024)
------------------------------------
-
-New Features:
-
-* A new ``self._pybind11_conduit_v1_()`` method is automatically added to all
- ``py::class_``-wrapped types, to enable type-safe interoperability between
- different independent Python/C++ bindings systems, including pybind11
- versions with different ``PYBIND11_INTERNALS_VERSION``'s. Supported on
- pybind11 2.11.2, 2.12.1, and 2.13.6+.
- `#5296 `_
-
-
-Bug fixes:
-
-* Using ``__cpp_nontype_template_args`` instead of ``__cpp_nontype_template_parameter_class``.
- `#5330 `_
-
-* Properly translate C++ exception to Python exception when creating Python buffer from wrapped object.
- `#5324 `_
-
-
-Documentation:
-
-* Adds an answer (FAQ) for "What is a highly conclusive and simple way to find memory leaks?".
- `#5340 `_
-
-
-Version 2.13.5 (August 22, 2024)
---------------------------------
-
-Bug fixes:
-
-* Fix includes when using Windows long paths (``\\?\`` prefix).
- `#5321 `_
-
-* Support ``-Wpedantic`` in C++20 mode.
- `#5322 `_
-
-* Fix and test ```` support for ``py::tuple`` and ``py::list``.
- `#5314 `_
-
-Version 2.13.4 (August 14, 2024)
---------------------------------
-
-Bug fixes:
-
-* Fix paths with spaces, including on Windows.
- (Replaces regression from `#5302 `_)
- `#4874 `_
-
-Documentation:
-
-* Remove repetitive words.
- `#5308 `_
-
-
-Version 2.13.3 (August 13, 2024)
---------------------------------
-
-Bug fixes:
-
-* Quote paths from pybind11-config
- `#5302 `_
-
-
-* Fix typo in Emscripten support when in config mode (CMake)
- `#5301 `_
-
-
-Version 2.13.2 (August 13, 2024)
---------------------------------
-
-New Features:
-
-* A ``pybind11::detail::type_caster_std_function_specializations`` feature was added, to support specializations for
- ``std::function``'s with return types that require custom to-Python conversion behavior (to primary use case is to catch and
- convert exceptions).
- `#4597 `_
-
-
-Changes:
-
-
-* Use ``PyMutex`` instead of ``std::mutex`` for internal locking in the free-threaded build.
- `#5219 `_
-
-* Add a special type annotation for C++ empty tuple.
- `#5214 `_
-
-* When compiling for WebAssembly, add the required exception flags (CMake 3.13+).
- `#5298 `_
-
-Bug fixes:
-
-* Make ``gil_safe_call_once_and_store`` thread-safe in free-threaded CPython.
- `#5246 `_
-
-* A missing ``#include `` in pybind11/typing.h was added to fix build errors (in case user code does not already depend
- on that include).
- `#5208 `_
-
-* Fix regression introduced in #5201 for GCC<10.3 in C++20 mode.
- `#5205 `_
-
-
-.. fix(cmake)
-
-* Remove extra = when assigning flto value in the case for Clang in CMake.
- `#5207 `_
-
-
-Tests:
-
-* Adding WASM testing to our CI (Pyodide / Emscripten via scikit-build-core).
- `#4745 `_
-
-* clang-tidy (in GitHub Actions) was updated from clang 15 to clang 18.
- `#5272 `_
-
-
-Version 2.13.1 (June 26, 2024)
-------------------------------
-
-New Features:
-
-* Add support for ``Typing.Callable[..., T]``.
- `#5202 `_
-
-Bug fixes:
-
-* Avoid aligned allocation in free-threaded build in order to support macOS
- versions before 10.14.
- `#5200 `_
-
-Version 2.13.0 (June 25, 2024)
-------------------------------
-
-New Features:
-
-* Support free-threaded CPython (3.13t). Add ``py::mod_gil_not_used()`` tag to
- indicate if a module supports running with the GIL disabled.
- `#5148 `_
-
-* Support for Python 3.6 was removed. (Official end-of-life: 2021-12-23).
- `#5177 `_
-
-* ``py::list`` gained a ``.clear()`` method.
- `#5153 `_
-
-
-.. feat(types)
-
-* Support for ``Union``, ``Optional``, ``type[T]``, ``typing.TypeGuard``,
- ``typing.TypeIs``, ``typing.Never``, ``typing.NoReturn`` and
- ``typing.Literal`` was added to ``pybind11/typing.h``.
- `#5166 `_
- `#5165 `_
- `#5194 `_
- `#5193 `_
- `#5192 `_
-
-
-.. feat(cmake)
-
-* In CMake, if ``PYBIND11_USE_CROSSCOMPILING`` is enabled, then
- ``CMAKE_CROSSCOMPILING`` will be respected and will keep pybind11 from
- accessing the interpreter during configuration. Several CMake variables will
- be required in this case, but can be deduced from the environment variable
- ``SETUPTOOLS_EXT_SUFFIX``. The default (currently ``OFF``) may be changed in
- the future.
- `#5083 `_
-
-
-Bug fixes:
-
-* A refcount bug (leading to heap-use-after-free) involving trampoline
- functions with ``PyObject *`` return type was fixed.
- `#5156 `_
-
-* Return ``py::ssize_t`` from ``.ref_count()`` instead of ``int``.
- `#5139 `_
-
-* A subtle bug involving C++ types with unusual ``operator&`` overrides
- was fixed.
- `#5189 `_
-
-* Support Python 3.13 with minor fix, add to CI.
- `#5127 `_
-
-
-.. fix(cmake)
-
-* Fix mistake affecting old cmake and old boost.
- `#5149 `_
-
-
-Documentation:
-
-* Build docs updated to feature scikit-build-core and meson-python, and updated
- setuptools instructions.
- `#5168 `_
-
-
-Tests:
-
-* Avoid immortal objects in tests.
- `#5150 `_
-
-
-CI:
-
-* Compile against Python 3.13t in CI.
-
-* Use ``macos-13`` (Intel) for CI jobs for now (will drop Python 3.7 soon).
- `#5109 `_
-
-* Releases now have artifact attestations, visible at
- https://github.com/pybind/pybind11/attestations.
- `#5196 `_
-
-Other:
-
-* Some cleanup in preparation for 3.13 support.
- `#5137 `_
-
-* Avoid a warning by ensuring an iterator end check is included in release mode.
- `#5129 `_
-
-* Bump max cmake to 3.29.
- `#5075 `_
-
-* Update docs and noxfile.
- `#5071 `_
-
-Version 2.12.1 (September 13, 2024)
------------------------------------
-
-New Features:
-
-* A new ``self._pybind11_conduit_v1_()`` method is automatically added to all
- ``py::class_``-wrapped types, to enable type-safe interoperability between
- different independent Python/C++ bindings systems, including pybind11
- versions with different ``PYBIND11_INTERNALS_VERSION``'s. Supported on
- pybind11 2.11.2, 2.12.1, and 2.13.6+.
- `#5296 `_
-
-
-Version 2.12.0 (March 27, 2024)
--------------------------------
-
-New Features:
-
-* ``pybind11`` now supports compiling for
- `NumPy 2 `_. Most
- code shouldn't change (see :ref:`upgrade-guide-2.12` for details). However,
- if you experience issues you can define ``PYBIND11_NUMPY_1_ONLY`` to disable
- the new support for now, but this will be removed in the future.
- `#5050 `_
-
-* ``pybind11/gil_safe_call_once.h`` was added (it needs to be included
- explicitly). The primary use case is GIL-safe initialization of C++
- ``static`` variables.
- `#4877 `_
-
-* Support move-only iterators in ``py::make_iterator``,
- ``py::make_key_iterator``, ``py::make_value_iterator``.
- `#4834 `_
-
-* Two simple ``py::set_error()`` functions were added and the documentation was
- updated accordingly. In particular, ``py::exception<>::operator()`` was
- deprecated (use one of the new functions instead). The documentation for
- ``py::exception<>`` was further updated to not suggest code that may result
- in undefined behavior.
- `#4772 `_
-
-Bug fixes:
-
-* Removes potential for Undefined Behavior during process teardown.
- `#4897 `_
-
-* Improve compatibility with the nvcc compiler (especially CUDA 12.1/12.2).
- `#4893 `_
-
-* ``pybind11/numpy.h`` now imports NumPy's ``multiarray`` and ``_internal``
- submodules with paths depending on the installed version of NumPy (for
- compatibility with NumPy 2).
- `#4857 `_
-
-* Builtins collections names in docstrings are now consistently rendered in
- lowercase (list, set, dict, tuple), in accordance with PEP 585.
- `#4833 `_
-
-* Added ``py::typing::Iterator``, ``py::typing::Iterable``.
- `#4832 `_
-
-* Render ``py::function`` as ``Callable`` in docstring.
- `#4829 `_
-
-* Also bump ``PYBIND11_INTERNALS_VERSION`` for MSVC, which unlocks two new
- features without creating additional incompatibilities.
- `#4819 `_
-
-* Guard against crashes/corruptions caused by modules built with different MSVC
- versions.
- `#4779 `_
-
-* A long-standing bug in the handling of Python multiple inheritance was fixed.
- See PR #4762 for the rather complex details.
- `#4762 `_
-
-* Fix ``bind_map`` with ``using`` declarations.
- `#4952 `_
-
-* Qualify ``py::detail::concat`` usage to avoid ADL selecting one from
- somewhere else, such as modernjson's concat.
- `#4955 `_
-
-* Use new PyCode API on Python 3.12+.
- `#4916 `_
-
-* Minor cleanup from warnings reported by Clazy.
- `#4988 `_
-
-* Remove typing and duplicate ``class_`` for ``KeysView``/``ValuesView``/``ItemsView``.
- `#4985 `_
-
-* Use ``PyObject_VisitManagedDict()`` and ``PyObject_ClearManagedDict()`` on Python 3.13 and newer.
- `#4973 `_
-
-* Update ``make_static_property_type()`` to make it compatible with Python 3.13.
- `#4971 `_
-
-.. fix(types)
-
-* Render typed iterators for ``make_iterator``, ``make_key_iterator``,
- ``make_value_iterator``.
- `#4876 `_
-
-* Add several missing type name specializations.
- `#5073 `_
-
-* Change docstring render for ``py::buffer``, ``py::sequence`` and
- ``py::handle`` (to ``Buffer``, ``Sequence``, ``Any``).
- `#4831 `_
-
-* Fixed ``base_enum.__str__`` docstring.
- `#4827 `_
-
-* Enforce single line docstring signatures.
- `#4735 `_
-
-* Special 'typed' wrappers now available in ``typing.h`` to annotate tuple, dict,
- list, set, and function.
- `#4259 `_
-
-* Create ``handle_type_name`` specialization to type-hint variable length tuples.
- `#5051 `_
-
-.. fix(build)
-
-* Setting ``PYBIND11_FINDPYTHON`` to OFF will force the old FindPythonLibs mechanism to be used.
- `#5042 `_
-
-* Skip empty ``PYBIND11_PYTHON_EXECUTABLE_LAST`` for the first cmake run.
- `#4856 `_
-
-* Fix FindPython mode exports & avoid ``pkg_resources`` if
- ``importlib.metadata`` available.
- `#4941 `_
-
-* ``Python_ADDITIONAL_VERSIONS`` (classic search) now includes 3.12.
- `#4909 `_
-
-* ``pybind11.pc`` is now relocatable by default as long as install destinations
- are not absolute paths.
- `#4830 `_
-
-* Correctly detect CMake FindPython removal when used as a subdirectory.
- `#4806 `_
-
-* Don't require the libs component on CMake 3.18+ when using
- PYBIND11_FINDPYTHON (fixes manylinux builds).
- `#4805 `_
-
-* ``pybind11_strip`` is no longer automatically applied when
- ``CMAKE_BUILD_TYPE`` is unset.
- `#4780 `_
-
-* Support ``DEBUG_POSFIX`` correctly for debug builds.
- `#4761 `_
-
-* Hardcode lto/thin lto for Emscripten cross-compiles.
- `#4642 `_
-
-* Upgrade maximum supported CMake version to 3.27 to fix CMP0148 warnings.
- `#4786 `_
-
-Documentation:
-
-* Small fix to grammar in ``functions.rst``.
- `#4791 `_
-
-* Remove upper bound in example pyproject.toml for setuptools.
- `#4774 `_
-
-CI:
-
-* CI: Update NVHPC to 23.5 and Ubuntu 20.04.
- `#4764 `_
-
-* Test on PyPy 3.10.
- `#4714 `_
-
-Other:
-
-* Use Ruff formatter instead of Black.
- `#4912 `_
-
-* An ``assert()`` was added to help Coverty avoid generating a false positive.
- `#4817 `_
-
-Version 2.11.2 (September 13, 2024)
------------------------------------
-
-New Features:
-
-* A new ``self._pybind11_conduit_v1_()`` method is automatically added to all
- ``py::class_``-wrapped types, to enable type-safe interoperability between
- different independent Python/C++ bindings systems, including pybind11
- versions with different ``PYBIND11_INTERNALS_VERSION``'s. Supported on
- pybind11 2.11.2, 2.12.1, and 2.13.6+.
- `#5296 `_
-
-
-Version 2.11.1 (July 17, 2023)
-------------------------------
-
-Changes:
-
-* ``PYBIND11_NO_ASSERT_GIL_HELD_INCREF_DECREF`` is now provided as an option
- for disabling the default-on ``PyGILState_Check()``'s in
- ``pybind11::handle``'s ``inc_ref()`` & ``dec_ref()``.
- `#4753 `_
-
-* ``PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF`` was disabled for PyPy in general
- (not just PyPy Windows).
- `#4751 `_
-
-
-Version 2.11.0 (July 14, 2023)
-------------------------------
-
-New features:
-
-* The newly added ``pybind11::detail::is_move_constructible`` trait can be
- specialized for cases in which ``std::is_move_constructible`` does not work
- as needed. This is very similar to the long-established
- ``pybind11::detail::is_copy_constructible``.
- `#4631 `_
-
-* Introduce ``recursive_container_traits``.
- `#4623 `_
-
-* ``pybind11/type_caster_pyobject_ptr.h`` was added to support automatic
- wrapping of APIs that make use of ``PyObject *``. This header needs to
- included explicitly (i.e. it is not included implicitly
- with ``pybind/pybind11.h``).
- `#4601 `_
-
-* ``format_descriptor<>`` & ``npy_format_descriptor<>`` ``PyObject *``
- specializations were added. The latter enables ``py::array_t``
- to/from-python conversions.
- `#4674 `_
-
-* ``buffer_info`` gained an ``item_type_is_equivalent_to()`` member
- function.
- `#4674 `_
-
-* The ``capsule`` API gained a user-friendly constructor
- (``py::capsule(ptr, "name", dtor)``).
- `#4720 `_
-
-Changes:
-
-* ``PyGILState_Check()``'s in ``pybind11::handle``'s ``inc_ref()`` &
- ``dec_ref()`` are now enabled by default again.
- `#4246 `_
-
-* ``py::initialize_interpreter()`` using ``PyConfig_InitPythonConfig()``
- instead of ``PyConfig_InitIsolatedConfig()``, to obtain complete
- ``sys.path``.
- `#4473 `_
-
-* Cast errors now always include Python type information, even if
- ``PYBIND11_DETAILED_ERROR_MESSAGES`` is not defined. This increases binary
- sizes slightly (~1.5%) but the error messages are much more informative.
- `#4463 `_
-
-* The docstring generation for the ``std::array``-list caster was fixed.
- Previously, signatures included the size of the list in a non-standard,
- non-spec compliant way. The new format conforms to PEP 593.
- **Tooling for processing the docstrings may need to be updated accordingly.**
- `#4679 `_
-
-* Setter return values (which are inaccessible for all practical purposes) are
- no longer converted to Python (only to be discarded).
- `#4621 `_
-
-* Allow lambda specified to function definition to be ``noexcept(true)``
- in C++17.
- `#4593 `_
-
-* Get rid of recursive template instantiations for concatenating type
- signatures on C++17 and higher.
- `#4587 `_
-
-* Compatibility with Python 3.12 (beta). Note that the minimum pybind11
- ABI version for Python 3.12 is version 5. (The default ABI version
- for Python versions up to and including 3.11 is still version 4.).
- `#4570