From f584bd9b308b4e62787aed370bd829474510e598 Mon Sep 17 00:00:00 2001 From: Eugene Zhulenev Date: Thu, 6 Feb 2020 22:43:24 +0000 Subject: Fail at compile time if default executor tries to use non-default device --- unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'unsupported') diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h b/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h index 93bab11b1..c52fb77dc 100644 --- a/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h +++ b/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h @@ -83,11 +83,14 @@ class TensorExecutor { 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::value, - "You are missing `#define EIGEN_USE_THREADS`"); + // with/without `EIGEN_USE_THREADS` or `EIGEN_USE_GPU` is a potential ODR + // violation. If this template is instantiated with a non-default device, it + // means that this header file was included without defining + // `EIGEN_USE_THREADS`, `EIGEN_USE_GPU` or `EIGEN_USE_SYCL`. + static_assert(std::is_same::value, + "Default executor instantiated with non-default device. " + "You must #define EIGEN_USE_THREADS, EIGEN_USE_GPU or " + "EIGEN_USE_SYCL before including Eigen headers."); EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE void run(const Expression& expr, -- cgit v1.2.3