aboutsummaryrefslogtreecommitdiffhomepage
path: root/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h
diff options
context:
space:
mode:
authorGravatar Eugene Zhulenev <ezhulenev@google.com>2019-10-28 15:45:09 -0700
committerGravatar Eugene Zhulenev <ezhulenev@google.com>2019-10-28 15:45:09 -0700
commitbd864ab42b763e557bcbe2bf3f1bc1fcd5e9950e (patch)
tree49c026eac24123867bb08207aaa2395bd6403f97 /unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h
parent6332aff0b2487d8db31b9a79934b725415e1c488 (diff)
Prevent potential ODR in TensorExecutor
Diffstat (limited to 'unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h')
-rw-r--r--unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h b/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h
index f736c238f..4f72156a4 100644
--- a/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h
+++ b/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h
@@ -82,6 +82,13 @@ class TensorExecutor {
public:
typedef typename Expression::Index StorageIndex;
+ // Including `unsupported/Eigen/CXX11/Tensor` in different translation units
+ // with/without `EIGEN_USE_THREADS` is an ODR violation. If this template
+ // is instantiated with a thread pool device, it means that this header
+ // file was included without defining `EIGEN_USE_THREADS`.
+ static_assert(!std::is_same<Device, ThreadPoolDevice>::value,
+ "You are missing `#define EIGEN_USE_THREADS`");
+
EIGEN_DEVICE_FUNC
static EIGEN_STRONG_INLINE void run(const Expression& expr,
const Device& device = Device()) {