diff --git a/unsupported/Eigen/CXX11/src/Tensor/Tensor.h b/unsupported/Eigen/CXX11/src/Tensor/Tensor.h index fdbe8df4c..879057f38 100644 --- a/unsupported/Eigen/CXX11/src/Tensor/Tensor.h +++ b/unsupported/Eigen/CXX11/src/Tensor/Tensor.h @@ -55,7 +55,7 @@ namespace Eigen { * change dramatically. * * - * \ref TopicStorageOrders + * \ref TopicStorageOrders */ template @@ -75,7 +75,7 @@ class Tensor : public TensorBase > enum { IsAligned = bool(EIGEN_ALIGN) & !(Options_&DontAlign), - PacketAccess = true, + PacketAccess = (internal::packet_traits::size > 1), }; static const int Options = Options_; @@ -224,12 +224,31 @@ class Tensor : public TensorBase > } #endif - inline Tensor(const array& dimensions) - : m_storage(internal::array_prod(dimensions), dimensions) + inline explicit Tensor(const array& dimensions) + : m_storage(internal::array_prod(dimensions), dimensions) { EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED } + template + EIGEN_DEVICE_FUNC + EIGEN_STRONG_INLINE Tensor(const TensorBase& other) + { + typedef TensorAssignOp Assign; + Assign assign(*this, other.derived()); + resize(TensorEvaluator(assign, DefaultDevice()).dimensions()); + internal::TensorExecutor::run(assign, DefaultDevice()); + } + template + EIGEN_DEVICE_FUNC + EIGEN_STRONG_INLINE Tensor(const TensorBase& other) + { + typedef TensorAssignOp Assign; + Assign assign(*this, other.derived()); + resize(TensorEvaluator(assign, DefaultDevice()).dimensions()); + internal::TensorExecutor::run(assign, DefaultDevice()); + } + EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Tensor& operator=(const Tensor& other) {