From 2971503fed85add086cb163d24ee5d402d631aab Mon Sep 17 00:00:00 2001 From: Mmanu Chaturvedi Date: Tue, 23 May 2017 17:12:36 -0400 Subject: [PATCH] Specializing numeric_limits For AutoDiffScalar --- unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h | 7 +++++++ unsupported/test/autodiff_scalar.cpp | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h b/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h index d2808860c..279fe5cd3 100755 --- a/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h +++ b/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h @@ -683,4 +683,11 @@ template struct NumTraits > } +namespace std { +template +class numeric_limits > + : public numeric_limits {}; + +} // namespace std + #endif // EIGEN_AUTODIFF_SCALAR_H diff --git a/unsupported/test/autodiff_scalar.cpp b/unsupported/test/autodiff_scalar.cpp index 4df2f5c57..3a78d6b8d 100644 --- a/unsupported/test/autodiff_scalar.cpp +++ b/unsupported/test/autodiff_scalar.cpp @@ -72,6 +72,19 @@ template void check_hyperbolic_functions() VERIFY_IS_APPROX(res3.derivatives().x(), Scalar(0.339540557256150)); } +template +void check_limits_specialization() +{ + typedef Eigen::Matrix Deriv; + typedef Eigen::AutoDiffScalar AD; + + typedef std::numeric_limits A; + typedef std::numeric_limits B; + + bool res = std::is_base_of::value; + VERIFY_IS_EQUAL(res, true); +} + void test_autodiff_scalar() { for(int i = 0; i < g_repeat; i++) { @@ -79,5 +92,6 @@ void test_autodiff_scalar() CALL_SUBTEST_2( check_atan2() ); CALL_SUBTEST_3( check_hyperbolic_functions() ); CALL_SUBTEST_4( check_hyperbolic_functions() ); + CALL_SUBTEST_5( check_limits_specialization()); } }