# eigen 5.0.0 - Product: eigen (https://whatsnew.fyi/product/eigen) - Vendor: libeigen - Date: 2025-09-30 - Version: 5.0.0 - Original notes: https://gitlab.com/libeigen/eigen/-/releases/5.0.0 - Permalink: https://whatsnew.fyi/product/eigen/releases/5.0.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **changed** — Eigen 5.X.X requires C++14; set -std=c++14 or later when building with GNU-compatible compilers - **removed** — Macros such as EIGEN_HAS_CXX11 have been removed - **changed** — CMake build system has been modernized and older properties have been removed - **removed** — All LGPL-licensed code has been removed, including Constrained Conjugate Gradient - **changed** — Eigen::all and Eigen::last have been moved to Eigen::placeholders::all and Eigen::placeholders::last - **changed** — Direct inclusion of internal headers under ../src/.. paths will result in a compilation error - **deprecated** — Runtime SVD options for computing thin/full U/V have been deprecated in favor of compile-time options - **changed** — Scalar non-vectorized comparisons now return masks with values of Scalar(1) rather than having all bits set - **changed** — BLAS return types have been changed to void instead of int for compatibility with other BLAS implementations - **changed** — Eigen::aligned_allocator no longer inherits from std::allocator due to changes in the standard and use of allocate_at_least - **changed** — Euler angles are now returned in a more canonical form, potentially resulting in a change of behavior - **changed** — Eigen's random number generation has changed, resulting in a change of behavior ###### Summary Eigen 5.0 provides many new features, performance enhancements, and bugfixes throughout Eigen’s core template expression infrastructure and linear algebra facilities. The full set of changes and related issues are too large to list here, but can be accessed via the release milestone %"5.0". This is the last major release to support the C++14 language standard. The master branch and subsequent releases will require support for C++17. ###### Versioning This release marks a transition to [Semantic Versioning](https://semver.org/). Previously, Eigen used a WORLD.MAJOR.MINOR scheme. From now on, version numbers will follow the MAJOR.MINOR.PATCH format, indicating breaking changes, new features, and bug fixes, respectively. The WORLD version will remain 3 for this and subsequent releases for posterity. See the table below: ``` ╔═════════╦═════╦═════╗ ║ Release ║ 3.4 ║ 5.0 ║ ╠═════════╬═════╬═════╣ ║ WORLD ║ 3 ║ 3 ║ ║ MAJOR ║ 4 ║ 5 ║ ║ MINOR ║ 0 ║ 0 ║ ║ PATCH ║ - ║ 0 ║ ╚═════════╩═════╩═════╝ ``` ###### Breaking changes * Eigen 5.X.X requires C++14. When building with GNU-compatible compilers, set `-std=c++14` or later. As part of this change, some macros such as `EIGEN_HAS_CXX11` have also been removed. * The CMake build system has been modernized and older properties have been removed - projects relying on CMake may need to update their configurations [!485]. * All LGPL-licensed code has been removed (i.e. Constrained Conjugate Gradient) [!1197]. These were "unsupported" anyways, and weren't widely used. * Due to name conflicts with other projects, `Eigen::all` and `Eigen::last` have been moved to `Eigen::placeholders::all` and `Eigen::placeholders::last` [!649]. * Any direct inclusion of an internal header (i.e. under a `../src/..` path) will result in a compilation error [!631]. * Runtime SVD options for computing thin/full U/V have been deprecated: use compile-time options instead [!826]. * Scalar (i.e. non-vectorized) comparisons now return masks with values of `Scalar(1)` rather than having all bits set to avoid undefined behavior [!1862]. * BLAS return types have been changed for Eigen BLAS to `void` instead of `int` for compatibility with other BLAS implementations [!1497]. * `Eigen::aligned_allocator` no longer inherits from `std::allocator` due to a change in the standard and the use of `allocate_at_least` [!1795]. * Euler angles are now returned in a more canonical form, potentially resulting in a change of behavior [!1301, !1314]. * Eigen's random number generation has changed, resulting in a change of behavior. Please do not rely on specific random numbers from Eigen - these were never guaranteed to be consistent across Eigen versions, nor are they generally consistent across platforms [!1437].