diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h b/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h index 89dffbdfd..c936773bf 100644 --- a/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h +++ b/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h @@ -74,16 +74,16 @@ struct fixed_size_tensor_index_linearization_helper -struct Sizes : internal::numeric_list { - typedef internal::numeric_list Base; - static const std::size_t total_size = internal::arg_prod(Indices...); +template +struct Sizes : internal::numeric_list { + typedef internal::numeric_list Base; + static const std::ptrdiff_t total_size = internal::arg_prod(Indices...); - EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE size_t rank() const { + EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t rank() const { return Base::count; } - static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::size_t TotalSize() { + static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t TotalSize() { return internal::arg_prod(Indices...); } @@ -94,7 +94,7 @@ struct Sizes : internal::numeric_list { } #ifdef EIGEN_HAS_VARIADIC_TEMPLATES template Sizes(DenseIndex...) { } - explicit Sizes(std::initializer_list /*l*/) { + explicit Sizes(std::initializer_list /*l*/) { // todo: add assertion } #endif @@ -114,8 +114,8 @@ struct Sizes : internal::numeric_list { } }; -template -EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::size_t array_prod(const Sizes&) { +template +EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t array_prod(const Sizes&) { return Sizes::total_size; } @@ -327,13 +327,13 @@ template struct array_size struct array_size > { -static const size_t value = Sizes::count; +template struct array_size > { +static const std::ptrdiff_t value = Sizes::count; }; -template struct array_size > { -static const size_t value = Sizes::count; +template struct array_size > { +static const std::ptrdiff_t value = Sizes::count; }; -template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::size_t array_get(const Sizes&) { +template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t array_get(const Sizes&) { return get >::value; } #else diff --git a/unsupported/test/cxx11_tensor_dimension.cpp b/unsupported/test/cxx11_tensor_dimension.cpp index 93cf4a91c..247d312ae 100644 --- a/unsupported/test/cxx11_tensor_dimension.cpp +++ b/unsupported/test/cxx11_tensor_dimension.cpp @@ -34,7 +34,7 @@ static void test_fixed_size() VERIFY_IS_EQUAL((int)Eigen::internal::array_get<0>(dimensions), 2); VERIFY_IS_EQUAL((int)Eigen::internal::array_get<1>(dimensions), 3); VERIFY_IS_EQUAL((int)Eigen::internal::array_get<2>(dimensions), 7); - VERIFY_IS_EQUAL(dimensions.TotalSize(), 2ul*3*7); + VERIFY_IS_EQUAL(dimensions.TotalSize(), 2*3*7); }