.. _changelog:

Changelog
#########

Starting with version 1.8.0, pybind11 releases use a `semantic versioning
<http://semver.org>`_ policy.


IN DEVELOPMENT
--------------

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 :code:`RuntimeError` when
  casting from :code:`py::str` to :code:`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 :ref:`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>`_

  * :ref:`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 :doc:`cmake/index`.

  * Optional :ref:`find-python-mode` and :ref:`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`_. 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`_ 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.

.. _pre-commit: https://pre-commit.com

.. _pybind11-mkdoc: https://github.com/pybind/pybind11-mkdoc

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
  :doc:`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>`_.

  .. code-block:: 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>`_.

  .. code-block:: 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 :ref:`macros` for details.
  `#879 <https://github.com/pybind/pybind11/pull/879>`_.

  .. code-block:: 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 :doc:`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 :ref:`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 :ref:`custom_constructors` for details.
  `#805 <https://github.com/pybind/pybind11/pull/805>`_,
  `#1014 <https://github.com/pybind/pybind11/pull/1014>`_.

  .. code-block:: 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
  :doc:`upgrade` and :ref:`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 :ref:`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 :ref:`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 :ref:`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 :ref:`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 :ref:`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>`_.

  .. code-block:: 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>`_.

    .. code-block:: 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

       .. code-block:: cpp

           py::class_<TrampolineClass>("MyClass")
             .alias<MyClass>()
             ....

       write

       .. code-block:: 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:

    .. code-block:: 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:

    .. code-block:: 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
