4 #ifndef DT_COMPILER_DETECTION_H 5 #define DT_COMPILER_DETECTION_H 8 # define DT_COMPILER_IS_Comeau 0 9 # define DT_COMPILER_IS_Intel 0 10 # define DT_COMPILER_IS_PathScale 0 11 # define DT_COMPILER_IS_Embarcadero 0 12 # define DT_COMPILER_IS_Borland 0 13 # define DT_COMPILER_IS_Watcom 0 14 # define DT_COMPILER_IS_OpenWatcom 0 15 # define DT_COMPILER_IS_SunPro 0 16 # define DT_COMPILER_IS_HP 0 17 # define DT_COMPILER_IS_Compaq 0 18 # define DT_COMPILER_IS_zOS 0 19 # define DT_COMPILER_IS_XL 0 20 # define DT_COMPILER_IS_VisualAge 0 21 # define DT_COMPILER_IS_PGI 0 22 # define DT_COMPILER_IS_Cray 0 23 # define DT_COMPILER_IS_TI 0 24 # define DT_COMPILER_IS_Fujitsu 0 25 # define DT_COMPILER_IS_SCO 0 26 # define DT_COMPILER_IS_AppleClang 0 27 # define DT_COMPILER_IS_Clang 0 28 # define DT_COMPILER_IS_GNU 0 29 # define DT_COMPILER_IS_MSVC 0 30 # define DT_COMPILER_IS_ADSP 0 31 # define DT_COMPILER_IS_IAR 0 32 # define DT_COMPILER_IS_ARMCC 0 33 # define DT_COMPILER_IS_MIPSpro 0 36 # undef DT_COMPILER_IS_Comeau 37 # define DT_COMPILER_IS_Comeau 1 39 #elif defined(__INTEL_COMPILER) || defined(__ICC) 40 # undef DT_COMPILER_IS_Intel 41 # define DT_COMPILER_IS_Intel 1 43 #elif defined(__PATHCC__) 44 # undef DT_COMPILER_IS_PathScale 45 # define DT_COMPILER_IS_PathScale 1 47 #elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) 48 # undef DT_COMPILER_IS_Embarcadero 49 # define DT_COMPILER_IS_Embarcadero 1 51 #elif defined(__BORLANDC__) 52 # undef DT_COMPILER_IS_Borland 53 # define DT_COMPILER_IS_Borland 1 55 #elif defined(__WATCOMC__) && __WATCOMC__ < 1200 56 # undef DT_COMPILER_IS_Watcom 57 # define DT_COMPILER_IS_Watcom 1 59 #elif defined(__WATCOMC__) 60 # undef DT_COMPILER_IS_OpenWatcom 61 # define DT_COMPILER_IS_OpenWatcom 1 63 #elif defined(__SUNPRO_CC) 64 # undef DT_COMPILER_IS_SunPro 65 # define DT_COMPILER_IS_SunPro 1 67 #elif defined(__HP_aCC) 68 # undef DT_COMPILER_IS_HP 69 # define DT_COMPILER_IS_HP 1 71 #elif defined(__DECCXX) 72 # undef DT_COMPILER_IS_Compaq 73 # define DT_COMPILER_IS_Compaq 1 75 #elif defined(__IBMCPP__) && defined(__COMPILER_VER__) 76 # undef DT_COMPILER_IS_zOS 77 # define DT_COMPILER_IS_zOS 1 79 #elif defined(__ibmxl__) || (defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800) 80 # undef DT_COMPILER_IS_XL 81 # define DT_COMPILER_IS_XL 1 83 #elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 84 # undef DT_COMPILER_IS_VisualAge 85 # define DT_COMPILER_IS_VisualAge 1 88 # undef DT_COMPILER_IS_PGI 89 # define DT_COMPILER_IS_PGI 1 92 # undef DT_COMPILER_IS_Cray 93 # define DT_COMPILER_IS_Cray 1 95 #elif defined(__TI_COMPILER_VERSION__) 96 # undef DT_COMPILER_IS_TI 97 # define DT_COMPILER_IS_TI 1 99 #elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) 100 # undef DT_COMPILER_IS_Fujitsu 101 # define DT_COMPILER_IS_Fujitsu 1 103 #elif defined(__SCO_VERSION__) 104 # undef DT_COMPILER_IS_SCO 105 # define DT_COMPILER_IS_SCO 1 107 #elif defined(__clang__) && defined(__apple_build_version__) 108 # undef DT_COMPILER_IS_AppleClang 109 # define DT_COMPILER_IS_AppleClang 1 111 #elif defined(__clang__) 112 # undef DT_COMPILER_IS_Clang 113 # define DT_COMPILER_IS_Clang 1 115 #elif defined(__GNUC__) || defined(__GNUG__) 116 # undef DT_COMPILER_IS_GNU 117 # define DT_COMPILER_IS_GNU 1 119 #elif defined(_MSC_VER) 120 # undef DT_COMPILER_IS_MSVC 121 # define DT_COMPILER_IS_MSVC 1 123 #elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) 124 # undef DT_COMPILER_IS_ADSP 125 # define DT_COMPILER_IS_ADSP 1 127 #elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) 128 # undef DT_COMPILER_IS_IAR 129 # define DT_COMPILER_IS_IAR 1 131 #elif defined(__ARMCC_VERSION) 132 # undef DT_COMPILER_IS_ARMCC 133 # define DT_COMPILER_IS_ARMCC 1 135 #elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) 136 # undef DT_COMPILER_IS_MIPSpro 137 # define DT_COMPILER_IS_MIPSpro 1 142 # if DT_COMPILER_IS_GNU 144 # if !((__GNUC__ * 100 + __GNUC_MINOR__) >= 404) 145 # error Unsupported compiler version 148 # if defined(__GNUC__) 149 # define DT_COMPILER_VERSION_MAJOR (__GNUC__) 151 # define DT_COMPILER_VERSION_MAJOR (__GNUG__) 153 # if defined(__GNUC_MINOR__) 154 # define DT_COMPILER_VERSION_MINOR (__GNUC_MINOR__) 156 # if defined(__GNUC_PATCHLEVEL__) 157 # define DT_COMPILER_VERSION_PATCH (__GNUC_PATCHLEVEL__) 160 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L 161 # define DT_COMPILER_CXX_THREAD_LOCAL 1 163 # define DT_COMPILER_CXX_THREAD_LOCAL 0 166 # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L 167 # define DT_COMPILER_CXX_ATTRIBUTE_DEPRECATED 1 169 # define DT_COMPILER_CXX_ATTRIBUTE_DEPRECATED 0 172 # elif DT_COMPILER_IS_Clang 174 # if !(((__clang_major__ * 100) + __clang_minor__) >= 301) 175 # error Unsupported compiler version 178 # define DT_COMPILER_VERSION_MAJOR (__clang_major__) 179 # define DT_COMPILER_VERSION_MINOR (__clang_minor__) 180 # define DT_COMPILER_VERSION_PATCH (__clang_patchlevel__) 181 # if defined(_MSC_VER) 183 # define DT_SIMULATE_VERSION_MAJOR (_MSC_VER / 100) 184 # define DT_SIMULATE_VERSION_MINOR (_MSC_VER % 100) 187 # if ((__clang_major__ * 100) + __clang_minor__) >= 301 && __has_feature(cxx_thread_local) 188 # define DT_COMPILER_CXX_THREAD_LOCAL 1 190 # define DT_COMPILER_CXX_THREAD_LOCAL 0 193 # if ((__clang_major__ * 100) + __clang_minor__) >= 304 && __cplusplus > 201103L 194 # define DT_COMPILER_CXX_ATTRIBUTE_DEPRECATED 1 196 # define DT_COMPILER_CXX_ATTRIBUTE_DEPRECATED 0 199 # elif DT_COMPILER_IS_AppleClang 201 # if !(((__clang_major__ * 100) + __clang_minor__) >= 400) 202 # error Unsupported compiler version 205 # define DT_COMPILER_VERSION_MAJOR (__clang_major__) 206 # define DT_COMPILER_VERSION_MINOR (__clang_minor__) 207 # define DT_COMPILER_VERSION_PATCH (__clang_patchlevel__) 208 # if defined(_MSC_VER) 210 # define DT_SIMULATE_VERSION_MAJOR (_MSC_VER / 100) 211 # define DT_SIMULATE_VERSION_MINOR (_MSC_VER % 100) 213 # define DT_COMPILER_VERSION_TWEAK (__apple_build_version__) 215 # if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_thread_local) 216 # define DT_COMPILER_CXX_THREAD_LOCAL 1 218 # define DT_COMPILER_CXX_THREAD_LOCAL 0 221 # if ((__clang_major__ * 100) + __clang_minor__) >= 501 && __cplusplus > 201103L 222 # define DT_COMPILER_CXX_ATTRIBUTE_DEPRECATED 1 224 # define DT_COMPILER_CXX_ATTRIBUTE_DEPRECATED 0 227 # elif DT_COMPILER_IS_MSVC 229 # if !(_MSC_VER >= 1600) 230 # error Unsupported compiler version 234 # define DT_COMPILER_VERSION_MAJOR (_MSC_VER / 100) 235 # define DT_COMPILER_VERSION_MINOR (_MSC_VER % 100) 236 # if defined(_MSC_FULL_VER) 237 # if _MSC_VER >= 1400 239 # define DT_COMPILER_VERSION_PATCH (_MSC_FULL_VER % 100000) 242 # define DT_COMPILER_VERSION_PATCH (_MSC_FULL_VER % 10000) 245 # if defined(_MSC_BUILD) 246 # define DT_COMPILER_VERSION_TWEAK (_MSC_BUILD) 249 # if _MSC_VER >= 1900 250 # define DT_COMPILER_CXX_THREAD_LOCAL 1 252 # define DT_COMPILER_CXX_THREAD_LOCAL 0 255 # if _MSC_VER >= 1900 256 # define DT_COMPILER_CXX_ATTRIBUTE_DEPRECATED 1 258 # define DT_COMPILER_CXX_ATTRIBUTE_DEPRECATED 0 262 # error Unsupported compiler 265 # if defined(DT_COMPILER_CXX_THREAD_LOCAL) && DT_COMPILER_CXX_THREAD_LOCAL 266 # define DT_THREAD_LOCAL thread_local 267 # elif DT_COMPILER_IS_GNU || DT_COMPILER_IS_Clang || DT_COMPILER_IS_AppleClang 268 # define DT_THREAD_LOCAL __thread 269 # elif DT_COMPILER_IS_MSVC 270 # define DT_THREAD_LOCAL __declspec(thread) 276 # ifndef DT_DEPRECATED 277 # if defined(DT_COMPILER_CXX_ATTRIBUTE_DEPRECATED) && DT_COMPILER_CXX_ATTRIBUTE_DEPRECATED 278 # define DT_DEPRECATED [[deprecated]] 279 # define DT_DEPRECATED_MSG(MSG) [[deprecated(MSG)]] 280 # elif DT_COMPILER_IS_GNU || DT_COMPILER_IS_Clang 281 # define DT_DEPRECATED __attribute__((__deprecated__)) 282 # define DT_DEPRECATED_MSG(MSG) __attribute__((__deprecated__(MSG))) 283 # elif DT_COMPILER_IS_MSVC 284 # define DT_DEPRECATED __declspec(deprecated) 285 # define DT_DEPRECATED_MSG(MSG) __declspec(deprecated(MSG)) 287 # define DT_DEPRECATED 288 # define DT_DEPRECATED_MSG(MSG) Portable macros for compiler attributes.