Fix up C++ version detection macros and cmake tests.

This commit is contained in:
Antonio Sánchez 2022-12-20 18:06:03 +00:00
parent bb6675caf7
commit dbf7ae6f9b
3 changed files with 6 additions and 17 deletions

View File

@ -650,11 +650,11 @@
// The macro EIGEN_COMP_CXXVER defines the c++ version expected by the compiler. // The macro EIGEN_COMP_CXXVER defines the c++ version expected by the compiler.
// For instance, if compiling with gcc and -std=c++17, then EIGEN_COMP_CXXVER // For instance, if compiling with gcc and -std=c++17, then EIGEN_COMP_CXXVER
// is defined to 17. // is defined to 17.
#if EIGEN_CPLUSPLUS > 201703L #if EIGEN_CPLUSPLUS >= 202002L
#define EIGEN_COMP_CXXVER 20 #define EIGEN_COMP_CXXVER 20
#elif EIGEN_CPLUSPLUS > 201402L #elif EIGEN_CPLUSPLUS >= 201703L
#define EIGEN_COMP_CXXVER 17 #define EIGEN_COMP_CXXVER 17
#elif EIGEN_CPLUSPLUS > 201103L #elif EIGEN_CPLUSPLUS >= 201402L
#define EIGEN_COMP_CXXVER 14 #define EIGEN_COMP_CXXVER 14
#elif EIGEN_CPLUSPLUS >= 201103L #elif EIGEN_CPLUSPLUS >= 201103L
#define EIGEN_COMP_CXXVER 11 #define EIGEN_COMP_CXXVER 11

View File

@ -185,18 +185,7 @@ ei_add_test(io)
ei_add_test(packetmath "-DEIGEN_FAST_MATH=1") ei_add_test(packetmath "-DEIGEN_FAST_MATH=1")
ei_add_test(vectorization_logic) ei_add_test(vectorization_logic)
ei_add_test(basicstuff) ei_add_test(basicstuff)
ei_add_test_internal(constexpr constexpr_cxx14) ei_add_test(constexpr)
target_compile_features(constexpr_cxx14 PRIVATE cxx_std_14)
if ("cxx_std_17" IN_LIST CMAKE_CXX_COMPILE_FEATURES)
# C++17 changes some rules related to constexpr, check that it works
ei_add_test_internal(constexpr constexpr_cxx17)
target_compile_features(constexpr_cxx17 PRIVATE cxx_std_17)
endif()
if ("cxx_std_20" IN_LIST CMAKE_CXX_COMPILE_FEATURES)
# C++20 changes some rules related to constexpr, check that it works
ei_add_test_internal(constexpr constexpr_cxx20)
target_compile_features(constexpr_cxx20 PRIVATE cxx_std_20)
endif()
ei_add_test(constructor) ei_add_test(constructor)
ei_add_test(linearstructure) ei_add_test(linearstructure)
ei_add_test(integer_types) ei_add_test(integer_types)

View File

@ -15,7 +15,7 @@ EIGEN_DECLARE_TEST(constexpr) {
// until after the constructor returns: // until after the constructor returns:
// error: member Eigen::internal::plain_array<int, 9, 0, 0>::array must be initialized by mem-initializer in // error: member Eigen::internal::plain_array<int, 9, 0, 0>::array must be initialized by mem-initializer in
// constexpr constructor // constexpr constructor
#if EIGEN_COMP_CXXVER >= 20 || defined(__clang__) #if EIGEN_COMP_CXXVER >= 20
constexpr Matrix3i mat({{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}); constexpr Matrix3i mat({{1, 2, 3}, {4, 5, 6}, {7, 8, 9}});
VERIFY_IS_EQUAL(mat.size(), 9); VERIFY_IS_EQUAL(mat.size(), 9);
VERIFY_IS_EQUAL(mat(0, 0), 1); VERIFY_IS_EQUAL(mat(0, 0), 1);
@ -35,7 +35,7 @@ EIGEN_DECLARE_TEST(constexpr) {
VERIFY_IS_EQUAL(dyn_arr(0, 0), 1); VERIFY_IS_EQUAL(dyn_arr(0, 0), 1);
VERIFY_IS_EQUAL(dyn_arr.size(), 9); VERIFY_IS_EQUAL(dyn_arr.size(), 9);
static_assert(dyn_arr.coeff(0,1) == 2); static_assert(dyn_arr.coeff(0,1) == 2);
#endif // EIGEN_COMP_CXXVER >= 20 || defined(__clang__) #endif // EIGEN_COMP_CXXVER >= 20
} }
// Check that we can use the std::initializer_list constructor for constexpr variables. // Check that we can use the std::initializer_list constructor for constexpr variables.