diff options
author | Eugene Zhulenev <ezhulenev@google.com> | 2019-10-28 15:45:09 -0700 |
---|---|---|
committer | Eugene Zhulenev <ezhulenev@google.com> | 2019-10-28 15:45:09 -0700 |
commit | bd864ab42b763e557bcbe2bf3f1bc1fcd5e9950e (patch) | |
tree | 49c026eac24123867bb08207aaa2395bd6403f97 /unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h | |
parent | 6332aff0b2487d8db31b9a79934b725415e1c488 (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.h | 7 |
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()) { |