# 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.1.0 (this is still a work in progress)

New Features:

- Changed strict-mode numeric conversions for PEP 484 compatibility: `float` now accepts `int`, and `complex` now accepts `int` and `float`.
  [#5879](https://github.com/pybind/pybind11/pull/5879)

Internal:

- Improved `py::enum_` operator performance by restoring type-specific implementations.
  [#5887](https://github.com/pybind/pybind11/pull/5887)

- Optimized internal `std::unordered_map`/`std::unordered_set` hashing paths with `noexcept`.
  [#5960](https://github.com/pybind/pybind11/pull/5960)


## Version 3.0.3 (March 31, 2026)

Bug fixes:

- Fixed TSS key exhaustion in `implicitly_convertible()` when many implicit conversions are registered across large module sets.
  [#6020](https://github.com/pybind/pybind11/pull/6020)

- Fixed heap-buffer-overflow in `pythonbuf` with undersized buffers by enforcing a minimum buffer size.
  [#6019](https://github.com/pybind/pybind11/pull/6019)

- Fixed virtual-inheritance pointer offset crashes when dispatching inherited methods through virtual bases.
  [#6017](https://github.com/pybind/pybind11/pull/6017)

- Fixed `free(): invalid pointer` crashes during interpreter shutdown with `py::enum_<>` by duplicating late-added `def_property_static` argument strings.
  [#6015](https://github.com/pybind/pybind11/pull/6015)

- Fixed `function_record` heap-type deallocation to call `PyObject_Free()` and decref the type.
  [#6010](https://github.com/pybind/pybind11/pull/6010)

- Hardened `PYBIND11_MODULE_PYINIT` and `get_internals()` against module-initialization crashes.
  [#6018](https://github.com/pybind/pybind11/pull/6018)

- Fixed `static_pointer_cast` build failure with virtual inheritance in `holder_caster_foreign_helpers.h`.
  [#6014](https://github.com/pybind/pybind11/pull/6014)

- Fixed ambiguous `factory` template specialization that caused compilation failures with nvcc + GCC 14.
  [#6011](https://github.com/pybind/pybind11/pull/6011)

- Fixed crash in `def_readwrite` for non-smart-holder properties of smart-holder classes.
  [#6008](https://github.com/pybind/pybind11/pull/6008)

- Fixed memory leak for `py::dynamic_attr()` objects on Python 3.13+ by clearing managed `__dict__` contents during deallocation.
  [#5999](https://github.com/pybind/pybind11/pull/5999)

- Fixed binding of `noexcept` and ref-qualified (`&`, `&&`) methods inherited from unregistered base classes.
  [#5992](https://github.com/pybind/pybind11/pull/5992)

Internal:

- Moved `tomlkit` dependency to the dev dependency group.
  [#5990](https://github.com/pybind/pybind11/pull/5990)

- Switched to newer public CPython APIs (`PyType_GetFlags` and public vectorcall APIs where available).
  [#6005](https://github.com/pybind/pybind11/pull/6005)

Tests:

- Made an async callback test deterministic by replacing fixed sleep with bounded waiting.
  [#5986](https://github.com/pybind/pybind11/pull/5986)

CI:

- Re-enabled Android tests in the cibuildwheel workflow.
  [#6001](https://github.com/pybind/pybind11/pull/6001)


## Version 3.0.2 (February 16, 2026)

New Features:

- Added helper functions to `py::array` that return shape and strides as `std::span` when available.
  [#5974](https://github.com/pybind/pybind11/pull/5974)

Bug fixes:

- Added fallback locking for Python 3.13t where `PyCriticalSection_BeginMutex` is unavailable.
  [#5981](https://github.com/pybind/pybind11/pull/5981)

- Fixed race condition in `py::make_key_iterator` with free-threaded Python.
  [#5971](https://github.com/pybind/pybind11/pull/5971)

- MSVC 19.16 and earlier were blocked from using `std::launder` due to internal compiler errors.
  [#5968](https://github.com/pybind/pybind11/pull/5968)

- Internals destructors were updated to check the owning interpreter before clearing Python objects.
  [#5965](https://github.com/pybind/pybind11/pull/5965)

- Internals shutdown handling was refined in two iterations before release: an initial finalization-time cleanup was followed by a safety adjustment to avoid late-shutdown `py::cast` segfaults.
  [#5958](https://github.com/pybind/pybind11/pull/5958)
  [#5972](https://github.com/pybind/pybind11/pull/5972)

- Fixed ambiguous `str(handle)` construction for `object`-derived types like `kwargs` or `dict` by templatizing the constructor with SFINAE.
  [#5949](https://github.com/pybind/pybind11/pull/5949)

- Fixed concurrency consistency for `internals_pp_manager` under multiple-interpreters.
  [#5947](https://github.com/pybind/pybind11/pull/5947)

- Fixed MSVC LNK2001 in C++20 builds when /GL (whole program optimization) is enabled.
  [#5939](https://github.com/pybind/pybind11/pull/5939)

- Added per-interpreter storage for `gil_safe_call_once_and_store` to make it safe under multi-interpreters.
  [#5933](https://github.com/pybind/pybind11/pull/5933)

- A workaround for a GCC `-Warray-bounds` false positive in `argument_vector` was added.
  [#5908](https://github.com/pybind/pybind11/pull/5908)

- Corrected a mistake where support for `__index__` was added, but the type hints did not reflect acceptance of `SupportsIndex` objects. Also fixed a long-standing bug: the complex-caster did not accept `__index__` in `convert` mode.
  [#5891](https://github.com/pybind/pybind11/pull/5891)

- Fixed `*args/**kwargs` return types. Added type hinting to `py::make_tuple`.
  [#5881](https://github.com/pybind/pybind11/pull/5881)

- Fixed compiler error in `type_caster_generic` when casting a `T` implicitly convertible from `T*`.
  [#5873](https://github.com/pybind/pybind11/pull/5873)

- Updated `py::native_enum` bindings to unregister enum types on destruction, preventing a use-after-free when returning a destroyed enum instance.
  [#5871](https://github.com/pybind/pybind11/pull/5871)

- Fixed undefined behavior that occurred when importing pybind11 modules from non-main threads created by C API modules or embedded python interpreters.
  [#5870](https://github.com/pybind/pybind11/pull/5870)

- Fixed dangling pointer in `internals::registered_types_cpp_fast`.
  [#5867](https://github.com/pybind/pybind11/pull/5867)

- Added support for `std::shared_ptr<T>` when loading module-local or conduit types from other modules.
  [#5862](https://github.com/pybind/pybind11/pull/5862)

- Fixed thread-safety issues if types were concurrently registered while `get_local_type_info()` was called in free threaded Python.
  [#5856](https://github.com/pybind/pybind11/pull/5856)

- Fixed py::float_ casting and py::int_ and py::float_ type hints.
  [#5839](https://github.com/pybind/pybind11/pull/5839)

- Fixed two `smart_holder` bugs in `shared_ptr` and `unique_ptr` adoption with multiple/virtual inheritance:
    - `shared_ptr` to-Python caster was updated to register the correct subobject pointer (fixes #5786).
    - `unique_ptr` adoption was updated to own the proper object start while aliasing subobject pointers for registration, which fixed MSVC crashes during destruction.
  [#5836](https://github.com/pybind/pybind11/pull/5836)

- Constrained `accessor::operator=` templates to avoid obscuring special members.
  [#5832](https://github.com/pybind/pybind11/pull/5832)

- Fixed crash that can occur when finalizers acquire and release the GIL.
  [#5828](https://github.com/pybind/pybind11/pull/5828)

- Fixed compiler detection in `pybind11/detail/pybind11_namespace_macros.h` for clang-cl on Windows, to address warning suppression macros.
  [#5816](https://github.com/pybind/pybind11/pull/5816)

- Fixed compatibility with CMake policy CMP0190 by not always requiring a Python interpreter when cross-compiling.
  [#5829](https://github.com/pybind/pybind11/pull/5829)

- Added a static assertion to disallow `keep_alive` and `call_guard` on properties.
  [#5533](https://github.com/pybind/pybind11/pull/5533)

Internal:

- CMake policy limit was set to 4.1.
  [#5944](https://github.com/pybind/pybind11/pull/5944)

- Improved performance of function calls between Python and C++ by switching to the "vectorcall" calling protocol.
  [#5948](https://github.com/pybind/pybind11/pull/5948)

- Many C-style casts were replaced with C++-style casts.
  [#5930](https://github.com/pybind/pybind11/pull/5930)

- Added `cast_sources` abstraction to `type_caster_generic`.
  [#5866](https://github.com/pybind/pybind11/pull/5866)

- Improved the performance of from-Python conversions of legacy pybind11 enum objects bound by `py::enum_`.
  [#5860](https://github.com/pybind/pybind11/pull/5860)

- Reduced size overhead by deduplicating functions' readable signatures and type information.
  [#5857](https://github.com/pybind/pybind11/pull/5857)

- Used new Python 3.14 C APIs when available.
  [#5854](https://github.com/pybind/pybind11/pull/5854)

- Improved performance of function dispatch and type casting by porting two-level type info lookup strategy from nanobind.
  [#5842](https://github.com/pybind/pybind11/pull/5842)

- Updated `.gitignore` to exclude `__pycache__/` directories.
  [#5838](https://github.com/pybind/pybind11/pull/5838)

- Changed internals to use `thread_local` instead of `thread_specific_storage` for increased performance.
  [#5834](https://github.com/pybind/pybind11/pull/5834)

- Reduced function call overhead by using thread_local for loader_life_support when possible.
  [#5830](https://github.com/pybind/pybind11/pull/5830)

- Removed heap allocation for the C++ argument array when dispatching functions with 6 or fewer arguments.
  [#5824](https://github.com/pybind/pybind11/pull/5824)


Documentation:

- Fixed docstring for `long double` complex types to use `numpy.clongdouble` instead of the deprecated `numpy.longcomplex` (removed in NumPy 2.0).
  [#5952](https://github.com/pybind/pybind11/pull/5952)

- The "Supported compilers" and "Supported platforms" sections in the main `README.rst` were replaced with a new "Supported platforms & compilers" section that points to the CI test matrix as the living source of truth.
  [#5910](https://github.com/pybind/pybind11/pull/5910)

- Fixed documentation formatting.
  [#5903](https://github.com/pybind/pybind11/pull/5903)

- Updated upgrade notes for `py::native_enum`.
  [#5885](https://github.com/pybind/pybind11/pull/5885)

- Clarified in the docs to what extent bindings are global.
  [#5859](https://github.com/pybind/pybind11/pull/5859)


Tests:

- Fixed deadlock in a free-threading test by releasing the GIL while waiting on synchronization.
  [#5973](https://github.com/pybind/pybind11/pull/5973)

- Calls to `env.deprecated_call()` were replaced with direct calls to `pytest.deprecated_call()`.
  [#5893](https://github.com/pybind/pybind11/pull/5893)

- Updated pytest configuration to use `log_level` instead of `log_cli_level`.
  [#5890](https://github.com/pybind/pybind11/pull/5890)


CI:

- Added CI tests for windows-11-arm with clang/MSVC (currently python 3.13), windows-11-arm with clang/mingw (currently python 3.12).
  [#5932](https://github.com/pybind/pybind11/pull/5932)

- These clang-tidy rules were added: `readability-redundant-casting`, `readability-redundant-inline-specifier`, `readability-redundant-member-init`
  [#5924](https://github.com/pybind/pybind11/pull/5924)

- Replaced deprecated macos-13 runners with macos-15-intel in CI.
  [#5916](https://github.com/pybind/pybind11/pull/5916)

- Restored `runs-on: windows-latest` in CI.
  [#5835](https://github.com/pybind/pybind11/pull/5835)

## 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-interpreters (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_guard`.
  [#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
