From 11eb66e1b5c33f0c532b95ccb6e687867bbb87d8 Mon Sep 17 00:00:00 2001 From: Rasmus Munk Larsen <4643818-rmlarsen1@users.noreply.gitlab.com> Date: Thu, 26 Feb 2026 06:17:39 -0800 Subject: [PATCH] Remove pre-C++14 workarounds from unsupported/ tensor code libeigen/eigen!2218 Co-authored-by: Rasmus Munk Larsen --- Eigen/src/Core/util/EmulateArray.h | 23 ++-------- .../CXX11/src/TensorSymmetry/StaticSymmetry.h | 4 +- .../TensorSymmetry/util/TemplateGroupTheory.h | 11 ++--- .../Eigen/CXX11/src/util/CXX11Workarounds.h | 46 +------------------ unsupported/test/CMakeLists.txt | 2 +- 5 files changed, 12 insertions(+), 74 deletions(-) diff --git a/Eigen/src/Core/util/EmulateArray.h b/Eigen/src/Core/util/EmulateArray.h index 6c4c22d41..9414cb2bb 100644 --- a/Eigen/src/Core/util/EmulateArray.h +++ b/Eigen/src/Core/util/EmulateArray.h @@ -231,37 +231,20 @@ template using array = std::array; namespace internal { -/* std::get is only constexpr in C++14, not yet in C++11 - * - libstdc++ from version 4.7 onwards has it nevertheless, - * so use that - * - libstdc++ older versions: use _M_instance directly - * - libc++ all versions so far: use __elems_ directly - * - all other libs: use std::get to be portable, but - * this may not be constexpr - */ -#if defined(__GLIBCXX__) && __GLIBCXX__ < 20120322 -#define STD_GET_ARR_HACK a._M_instance[I_] -#elif defined(_LIBCPP_VERSION) -#define STD_GET_ARR_HACK a.__elems_[I_] -#else -#define STD_GET_ARR_HACK std::template get(a) -#endif template constexpr T& array_get(std::array& a) { - return (T&)STD_GET_ARR_HACK; + return std::get(a); } template constexpr T&& array_get(std::array&& a) { - return (T&&)STD_GET_ARR_HACK; + return std::get(std::move(a)); } template constexpr T const& array_get(std::array const& a) { - return (T const&)STD_GET_ARR_HACK; + return std::get(a); } -#undef STD_GET_ARR_HACK - } // end namespace internal } // end namespace Eigen diff --git a/unsupported/Eigen/CXX11/src/TensorSymmetry/StaticSymmetry.h b/unsupported/Eigen/CXX11/src/TensorSymmetry/StaticSymmetry.h index 66a982bde..6ee508f2f 100644 --- a/unsupported/Eigen/CXX11/src/TensorSymmetry/StaticSymmetry.h +++ b/unsupported/Eigen/CXX11/src/TensorSymmetry/StaticSymmetry.h @@ -150,8 +150,8 @@ struct tensor_static_symgroup_do_apply> { } }; -template -struct tensor_static_symgroup_do_apply> { +template <> +struct tensor_static_symgroup_do_apply> { template static inline RV run(const std::array&, RV initial, Args&&...) { diff --git a/unsupported/Eigen/CXX11/src/TensorSymmetry/util/TemplateGroupTheory.h b/unsupported/Eigen/CXX11/src/TensorSymmetry/util/TemplateGroupTheory.h index aa16f3cd4..df8da6c38 100644 --- a/unsupported/Eigen/CXX11/src/TensorSymmetry/util/TemplateGroupTheory.h +++ b/unsupported/Eigen/CXX11/src/TensorSymmetry/util/TemplateGroupTheory.h @@ -132,8 +132,8 @@ struct strip_identities> { Equality::global_flags | strip_identities>::global_flags; }; -template