// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #pragma once #include <type_traits> /** pseudo: `template <class S = T>, if T is not const` * If T is const already, the specialization is discarded from the overload set instead of causing a compile error. * SFINAE not fully supported by current CUDA and Visual Studio compilers. */ #if defined(_MSC_VER) || defined(__CUDACC__) || defined(__APPLE_CC__) #define CLASS_S_EQ_T_ENABLE_IF_S_NON_CONST template <class S = T> #else #define CLASS_S_EQ_T_ENABLE_IF_S_NON_CONST \ template <class S = T, typename std::enable_if<!std::is_const<S>{}>::type* = nullptr> #endif // _MSC_VER