add missing support for std::pow(array,scalar)
diff --git a/Eigen/src/Array/GlobalFunctions.h b/Eigen/src/Array/GlobalFunctions.h index 5de87e6..1482565 100644 --- a/Eigen/src/Array/GlobalFunctions.h +++ b/Eigen/src/Array/GlobalFunctions.h
@@ -60,6 +60,12 @@ EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(log,ei_scalar_log_op) EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(abs,ei_scalar_abs_op) EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(sqrt,ei_scalar_sqrt_op) + + template<typename Derived> + inline const Eigen::CwiseUnaryOp<Eigen::ei_scalar_pow_op<typename Derived::Scalar>, Derived> + pow(const Eigen::ArrayBase<Derived>& x, const typename Derived::Scalar& exponent) { \ + return x.derived().pow(exponent); \ + } } namespace Eigen
diff --git a/test/array.cpp b/test/array.cpp index b1fa45b..7f44b7d 100644 --- a/test/array.cpp +++ b/test/array.cpp
@@ -171,6 +171,12 @@ VERIFY_IS_APPROX(m1.exp() * m2.exp(), std::exp(m1+m2)); VERIFY_IS_APPROX(m1.exp(), ei_exp(m1)); VERIFY_IS_APPROX(m1.exp() / m2.exp(), std::exp(m1-m2)); + + VERIFY_IS_APPROX(m1.pow(2), m1.square()); + VERIFY_IS_APPROX(std::pow(m1,2), m1.square()); + m3 = m1.abs(); + VERIFY_IS_APPROX(m3.pow(RealScalar(0.5)), m3.sqrt()); + VERIFY_IS_APPROX(std::pow(m3,RealScalar(0.5)), m3.sqrt()); } void test_array()