# Changelog

<style>
ul.simple > li > p {
  padding-bottom: .2em;
}
</style>

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.


## Version 3.0.1 (August 22, 2025)

Bug fixes:

- Fixed compilation error in `type_caster_enum_type` when casting
  pointer-to-enum types. Added pointer overload to handle dereferencing before
  enum conversion.
  [#5776](https://github.com/pybind/pybind11/pull/5776)

- Implement binary version of `make_index_sequence` to reduce template depth
  requirements for functions with many parameters.
  [#5751](https://github.com/pybind/pybind11/pull/5751)

- Subinterpreter-specific exception handling code was removed to resolve segfaults.
  [#5795](https://github.com/pybind/pybind11/pull/5795)

- Fixed issue that caused ``PYBIND11_MODULE`` code to run again if the module
  was re-imported after being deleted from ``sys.modules``.
  [#5782](https://github.com/pybind/pybind11/pull/5782)

- Prevent concurrent creation of sub-interpreters as a workaround for stdlib
  concurrency issues in Python 3.12.
  [#5779](https://github.com/pybind/pybind11/pull/5779)

- Fixed potential crash when using `cpp_function` objects with sub-interpreters.
  [#5771](https://github.com/pybind/pybind11/pull/5771)

- Fixed non-entrant check in `implicitly_convertible()`.
  [#5777](https://github.com/pybind/pybind11/pull/5777)

- Support C++20 on platforms that have older c++ runtimes.
  [#5761](https://github.com/pybind/pybind11/pull/5761)

- Fix compilation with clang on msys2.
  [#5757](https://github.com/pybind/pybind11/pull/5757)

- Avoid `nullptr` dereference warning with GCC 13.3.0 and python 3.11.13.
  [#5756](https://github.com/pybind/pybind11/pull/5756)

- Fix potential warning about number of threads being too large.
  [#5807](https://github.com/pybind/pybind11/pull/5807)


<!-- fix(cmake) -->

- Fix gcc 11.4+ warning about serial compilation using CMake.
  [#5791](https://github.com/pybind/pybind11/pull/5791)


Documentation:

- Improve `buffer_info` type checking in numpy docs.
  [#5805](https://github.com/pybind/pybind11/pull/5805)

- Replace `robotpy-build` with `semiwrap` in the binding tool list.
  [#5804](https://github.com/pybind/pybind11/pull/5804)

- Show nogil in most examples.
  [#5770](https://github.com/pybind/pybind11/pull/5770)

- Fix `py::trampoline_self_life_support` visibility in docs.
  [#5766](https://github.com/pybind/pybind11/pull/5766)


Tests:

- Avoid a spurious warning about `DOWNLOAD_CATCH` being manually specified.
  [#5803](https://github.com/pybind/pybind11/pull/5803)

- Fix an IsolatedConfig test.
  [#5768](https://github.com/pybind/pybind11/pull/5768)


CI:

- Add CI testing for Android.
  [#5714](https://github.com/pybind/pybind11/pull/5714)


Internal:

- Rename internal variables to avoid the word `slots` (reads better).
  [#5793](https://github.com/pybind/pybind11/pull/5793)


## Version 3.0.0 (July 10, 2025)

Pybind11 3.0 includes an ABI bump, the first required bump in many years
on Unix (Windows has had required bumps more often). This release contains
the smart-holder branch, multi-phase init and subinterpreter support,
`py::native_enum`, an interface to warnings, typing improvements, and more.
CMake now defaults to FindPython mode. Please check our upgrade guide for
more info on upgrading!

Support for Python 3.14, 3.14t, GraalPy, and PyPy 3.11 has been added, while
legacy support for Python 3.7, PyPy 3.8/3.9, and CMake \<3.15 has been removed.
Most deprecated features have been kept for this release, but anything
producing a warning in 3.0 may be removed in a future 3.x version. We also now
have a deprecation page.

New Features:

- The `smart_holder` branch has been merged, enabling
  `py::class_<T, py::smart_holder>`, which handles two-way conversion
  with `std::unique_ptr<T>` and `std::shared_ptr<T>` (simultaneously),
  disowning a Python object being passed to `std::unique_ptr<T>`,
  trampoline objects, and `std::enable_shared_from_this`.
  [#5542](https://github.com/pybind/pybind11/pull/5542)

  - Added support for `std::shared_ptr<const T>` in `py::init()` when using
    `py::smart_holder`, complementing existing support for
    `std::unique_ptr<const T>`.
    [#5731](https://github.com/pybind/pybind11/pull/5731)

  - Support const-only smart pointers.
    [#5718](https://github.com/pybind/pybind11/pull/5718)

  - Eliminate cross-DSO RTTI reliance from `trampoline_self_life_support` functionality, `smart_holder` deleter detection, and other
    `smart_holder` bookkeeping. Resolves platform-specific issues on macOS related to cross-DSO `dynamic_cast` and `typeid` mismatches.
    [#5728](https://github.com/pybind/pybind11/pull/5728) (replaces [#5700](https://github.com/pybind/pybind11/pull/5700))

- Changed `PYBIND11_MODULE` macro implementation to perform multi-phase
  module initialization (PEP 489) behind the scenes.
  [#5574](https://github.com/pybind/pybind11/pull/5574) and avoid destruction
  [#5688](https://github.com/pybind/pybind11/pull/5688)

- 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)

  - Rename macro `PYBIND11_SUBINTERPRETER_SUPPORT` -> `PYBIND11_HAS_SUBINTERPRETER_SUPPORT` to meet naming convention.
    [#5682](https://github.com/pybind/pybind11/pull/5682)

  - Allow subinterpreter support to be disabled if defined to 0. This is mostly an emergency workaround, and is not exposed in CMake.
    [#5708](https://github.com/pybind/pybind11/pull/5708) and [#5710](https://github.com/pybind/pybind11/pull/5710)

  - Modify internals pointer-to-pointer implementation to not use `thread_local` (better iOS support).
    [#5709](https://github.com/pybind/pybind11/pull/5709)

  - Support implementations without subinterpreter support.
    [#5732](https://github.com/pybind/pybind11/pull/5732)

- 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) and consolidate code
  [#5670](https://github.com/pybind/pybind11/pull/5670).

- Added API in `pybind11/subinterpreter.h` for embedding sub-intepreters (requires Python 3.12+).
  [#5666](https://github.com/pybind/pybind11/pull/5666)

- `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)

- Support `py::numpy_scalar<>` / `py::make_scalar()` for NumPy types.
  [#5726](https://github.com/pybind/pybind11/pull/5726)

- 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<handle>` and `array_t<object>`.
  [#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). Separately, a note was added to explain
  that the conduit feature only covers from-Python-to-C++ conversions.
  [#5375](https://github.com/pybind/pybind11/pull/5375) \|
  [#5740](https://github.com/pybind/pybind11/pull/5740)

- 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)

- Added `py::scoped_critical_section` to support free-threaded mode.
  [#5684](https://github.com/pybind/pybind11/pull/5684) \|
  [#5706](https://github.com/pybind/pybind11/pull/5706)

New Features / fixes (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)
- Fix `typing` and `collections.abc` type hint ambiguity.
  [#5663](https://github.com/pybind/pybind11/pull/5663)
- Add `typing_extensions` alternatives for all types that need them.
  [#5693](https://github.com/pybind/pybind11/pull/5693)

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)
- 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 and features (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) and support `--fresh`.
  [#5668](https://github.com/pybind/pybind11/pull/5668)
- Experimental CMake support for Android.
  [#5733](https://github.com/pybind/pybind11/pull/5733)
- Presets now generate `compile_commands.json`.
  [#5685](https://github.com/pybind/pybind11/pull/5685)

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)

- Use CPython macros to construct `PYBIND11_VERSION_HEX`.
  [#5683](https://github.com/pybind/pybind11/pull/5683)

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)

- 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)

- CI testing now includes
  `-Wwrite-strings -Wunreachable-code -Wpointer-arith -Wredundant-decls`
  in some jobs.
  [#5523](https://github.com/pybind/pybind11/pull/5523)

- Add nightly wheels to scientific-python's nightly wheelhouse.
  [#5675](https://github.com/pybind/pybind11/pull/5675)

- Expect free-threaded warning when loading a non-free-threaded module.
  [#5680](https://github.com/pybind/pybind11/pull/5680)

- Run pytest under Python devmode.
  [#5715](https://github.com/pybind/pybind11/pull/5715)

New and removed platforms:

- Support Python 3.14 (beta 1+).
  [#5646](https://github.com/pybind/pybind11/pull/5646)

- Added support for GraalPy Python implementation
  (<https://github.com/oracle/graalpython>).
  [#5380](https://github.com/pybind/pybind11/pull/5380)

- Support and test iOS in CI.
  [#5705](https://github.com/pybind/pybind11/pull/5705)

- Support for PyPy 3.11 added.
  [#5508](https://github.com/pybind/pybind11/pull/5508)
  And test in ci.
  [#5534](https://github.com/pybind/pybind11/pull/5534)

- 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) and fix regression [#5691](https://github.com/pybind/pybind11/pull/5691).

- 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_SDIST` has been removed.
  [#5598](https://github.com/pybind/pybind11/pull/5598) and updated
  docs/ci. [#5676](https://github.com/pybind/pybind11/pull/5676)

- clang 20 tested and used for clang-tidy.
  [#5692](https://github.com/pybind/pybind11/pull/5692)

- Drop testing on MSVC 2019 (as it is being removed from GitHub).
  [#5712](https://github.com/pybind/pybind11/pull/5712)

- Support Windows C++20 and Linux C++23 in tests.
  [#5707](https://github.com/pybind/pybind11/pull/5707)

## 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 `<ranges>` 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 <algorithm>` 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
  <https://github.com/pybind/pybind11/attestations>.
  [#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<T>`, `py::typing::Iterable<T>`.
  [#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<PyObject *>` to/from-python conversions.
  [#4674](https://github.com/pybind/pybind11/pull/4674)
- `buffer_info` gained an `item_type_is_equivalent_to<T>()` 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<std::type_index>` and
  `std::equal_to<std::type_index>` 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<std::monostate>` 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 <iostream>` 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 <command>` 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<Eigen::SparseMatrix<...>>` 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<py::none, ...>` 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<T>()` 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_<union_type>` 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<string>` 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<T>`.
  [#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<T>` 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<bool>` 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 `<pybind11/stl.h>`).
  [#1077](https://github.com/pybind/pybind11/pull/1077).

## v2.2.0 (August 31, 2017)

- Support for embedding the Python interpreter. See the
  `documentation page </advanced/embedding>` 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 <pybind11/embed.h>
  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<int>`. `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_<Example>(m, "Example")
      .def(py::init<std::string>()) // existing constructor
      .def(py::init([](int n) { // custom constructor
          return std::make_unique<Example>(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::gil_scoped_release>()`,
  `py::call_guard<py::scoped_ostream_redirect>()`. 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<py::eval_statements>()`
  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_<Derived>(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_<Aggregate>(m, "Aggregate")
  >     .def(py::init<int, const std::string &>());
  > ```

- 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<char, N>`
      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_<TrampolineClass>("MyClass")
  >       .alias<MyClass>()
  >       ....
  >     ```
  >
  >     write
  >
  >     ```cpp
  >     py::class_<MyClass, TrampolineClass>("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<T>)` (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_<Pet>(m, "Pet")
  >     .def("set", py::overload_cast<int>(&Pet::set), "Set the pet's age")
  >     .def("set", py::overload_cast<const std::string &>(&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<T>`.
  [#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<t>`.
  [#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<X>()`, 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
  (<https://github.com/pypa/packaging-problems/issues/74>)

## 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
