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