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()