// This source file checks that: | |
// 1) Header <cub/${header}> compiles without error. | |
// 2) Common macro collisions with platform/system headers are avoided. | |
// Define CUB_MACRO_CHECK(macro, header), which emits a diagnostic indicating | |
// a potential macro collision and halts. | |
// | |
// Use raw platform checks instead of the CUB_HOST_COMPILER macros since we | |
// don't want to #include any headers other than the one being tested. | |
// | |
// This is only implemented for MSVC/GCC/Clang. | |
// Fake up an error for MSVC | |
/* Print message that looks like an error: */ \ | |
__pragma(message(__FILE__ ":" CUB_MACRO_CHECK_IMPL0(__LINE__) \ | |
": error: " #msg)) \ | |
/* abort compilation due to static_assert or syntax error: */ \ | |
static_assert(false, #msg); | |
// GCC/clang are easy: | |
// Hacky way to build a string, but it works on all tested platforms. | |
CUB_MACRO_CHECK_IMPL(Identifier MACRO should not be used from Thrust \ | |
headers due to conflicts with HEADER.) | |
// complex.h conflicts | |
// windows.h conflicts | |
// Disabling for now; we use min/max in many places, but since most | |
// projects build with NOMINMAX this doesn't seem to be high priority to fix. | |
//#define min(...) CUB_MACRO_CHECK('min', windows.h) | |
//#define max(...) CUB_MACRO_CHECK('max', windows.h) | |