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. 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 asEIGEN_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
andEigen::last
have been moved toEigen::placeholders::all
andEigen::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 ofint
for compatibility with other BLAS implementations [!1497].
Eigen::aligned_allocator
no longer inherits fromstd::allocator
due to a change in the standard and the use ofallocate_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].