From 20991c3203818e685dbfd89e20408e5f1b254346 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Fri, 13 Jul 2018 17:47:28 +0200 Subject: bug #1571: fix is_convertible with "from" a reference. --- Eigen/src/Core/util/Meta.h | 2 +- test/meta.cpp | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Eigen/src/Core/util/Meta.h b/Eigen/src/Core/util/Meta.h index 748f24b1e..658cfa9eb 100755 --- a/Eigen/src/Core/util/Meta.h +++ b/Eigen/src/Core/util/Meta.h @@ -161,7 +161,7 @@ private: static no test(any_conversion, ...); public: - static From* ms_from; + static typename internal::remove_reference::type* ms_from; #ifdef __INTEL_COMPILER #pragma warning push #pragma warning ( disable : 2259 ) diff --git a/test/meta.cpp b/test/meta.cpp index 4904f3ba4..34c5520a6 100644 --- a/test/meta.cpp +++ b/test/meta.cpp @@ -80,7 +80,15 @@ void test_meta() STATIC_CHECK(( internal::is_convertible >::value )); STATIC_CHECK((!internal::is_convertible,double>::value )); STATIC_CHECK(( internal::is_convertible::value )); -// VERIFY((!internal::is_convertible::value )); //does not work because the conversion is prevented by a static assertion + STATIC_CHECK(( internal::is_convertible::value )); + STATIC_CHECK(( internal::is_convertible::value )); + STATIC_CHECK(( internal::is_convertible::value )); + STATIC_CHECK(( internal::is_convertible::value )); + STATIC_CHECK(( internal::is_convertible::value )); + STATIC_CHECK((!internal::is_convertible::value )); + STATIC_CHECK((!internal::is_convertible::value )); + STATIC_CHECK(( internal::is_convertible::value )); // std::is_convertible returns false here though Matrix3f from; Matrix3f& to = from; is valid. + //STATIC_CHECK((!internal::is_convertible::value )); //does not work because the conversion is prevented by a static assertion STATIC_CHECK((!internal::is_convertible::value )); STATIC_CHECK((!internal::is_convertible::value )); { -- cgit v1.2.3