mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-03-07 18:27:40 +08:00
bug #1752: make is_convertible equivalent to the std c++11 equivalent and fallback to std::is_convertible when c++11 is enabled.
This commit is contained in:
parent
fb557aec5c
commit
e7d8ba747c
@ -174,6 +174,11 @@ template<typename T> struct add_const_on_value_type<T*> { typedef T const
|
||||
template<typename T> struct add_const_on_value_type<T* const> { typedef T const* const type; };
|
||||
template<typename T> struct add_const_on_value_type<T const* const> { typedef T const* const type; };
|
||||
|
||||
#if EIGEN_HAS_CXX11
|
||||
|
||||
using std::is_convertible;
|
||||
|
||||
#else
|
||||
|
||||
template<typename From, typename To>
|
||||
struct is_convertible_impl
|
||||
@ -211,6 +216,14 @@ struct is_convertible
|
||||
enum { value = is_convertible_impl<From,To>::value };
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct is_convertible<T,T&> { enum { value = false }; };
|
||||
|
||||
template<typename T>
|
||||
struct is_convertible<const T,const T&> { enum { value = true }; };
|
||||
|
||||
#endif
|
||||
|
||||
/** \internal Allows to enable/disable an overload
|
||||
* according to a compile time condition.
|
||||
*/
|
||||
|
@ -87,8 +87,12 @@ EIGEN_DECLARE_TEST(meta)
|
||||
STATIC_CHECK(( internal::is_convertible<const Matrix3f&,const Matrix3f&>::value ));
|
||||
STATIC_CHECK((!internal::is_convertible<const Matrix3f&,Matrix3f&>::value ));
|
||||
STATIC_CHECK((!internal::is_convertible<const Matrix3f,Matrix3f&>::value ));
|
||||
STATIC_CHECK(( internal::is_convertible<Matrix3f,Matrix3f&>::value )); // std::is_convertible returns false here though Matrix3f from; Matrix3f& to = from; is valid.
|
||||
//STATIC_CHECK((!internal::is_convertible<Matrix3f,Matrix3d>::value )); //does not work because the conversion is prevented by a static assertion
|
||||
STATIC_CHECK(!( internal::is_convertible<Matrix3f,Matrix3f&>::value ));
|
||||
|
||||
STATIC_CHECK(!( internal::is_convertible<int,int&>::value ));
|
||||
STATIC_CHECK(( internal::is_convertible<const int,const int& >::value ));
|
||||
|
||||
//STATIC_CHECK((!internal::is_convertible<Matrix3f,Matrix3d>::value )); //does not even compile because the conversion is prevented by a static assertion
|
||||
STATIC_CHECK((!internal::is_convertible<Array33f,int>::value ));
|
||||
STATIC_CHECK((!internal::is_convertible<MatrixXf,float>::value ));
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user