hedley.h 57 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616
  1. /* Hedley - https://nemequ.github.io/hedley
  2. * Created by Evan Nemerson <[email protected]>
  3. *
  4. * To the extent possible under law, the author(s) have dedicated all
  5. * copyright and related and neighboring rights to this software to
  6. * the public domain worldwide. This software is distributed without
  7. * any warranty.
  8. *
  9. * For details, see <http://creativecommons.org/publicdomain/zero/1.0/>.
  10. * SPDX-License-Identifier: CC0-1.0
  11. */
  12. #if !defined(HEDLEY_VERSION) || (HEDLEY_VERSION < 10)
  13. #if defined(HEDLEY_VERSION)
  14. #undef HEDLEY_VERSION
  15. #endif
  16. #define HEDLEY_VERSION 10
  17. #if defined(HEDLEY_STRINGIFY_EX)
  18. #undef HEDLEY_STRINGIFY_EX
  19. #endif
  20. #define HEDLEY_STRINGIFY_EX(x) #x
  21. #if defined(HEDLEY_STRINGIFY)
  22. #undef HEDLEY_STRINGIFY
  23. #endif
  24. #define HEDLEY_STRINGIFY(x) HEDLEY_STRINGIFY_EX(x)
  25. #if defined(HEDLEY_CONCAT_EX)
  26. #undef HEDLEY_CONCAT_EX
  27. #endif
  28. #define HEDLEY_CONCAT_EX(a, b) a##b
  29. #if defined(HEDLEY_CONCAT)
  30. #undef HEDLEY_CONCAT
  31. #endif
  32. #define HEDLEY_CONCAT(a, b) HEDLEY_CONCAT_EX(a, b)
  33. #if defined(HEDLEY_VERSION_ENCODE)
  34. #undef HEDLEY_VERSION_ENCODE
  35. #endif
  36. #define HEDLEY_VERSION_ENCODE(major, minor, revision) \
  37. (((major)*1000000) + ((minor)*1000) + (revision))
  38. #if defined(HEDLEY_VERSION_DECODE_MAJOR)
  39. #undef HEDLEY_VERSION_DECODE_MAJOR
  40. #endif
  41. #define HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000)
  42. #if defined(HEDLEY_VERSION_DECODE_MINOR)
  43. #undef HEDLEY_VERSION_DECODE_MINOR
  44. #endif
  45. #define HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000)
  46. #if defined(HEDLEY_VERSION_DECODE_REVISION)
  47. #undef HEDLEY_VERSION_DECODE_REVISION
  48. #endif
  49. #define HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000)
  50. #if defined(HEDLEY_GNUC_VERSION)
  51. #undef HEDLEY_GNUC_VERSION
  52. #endif
  53. #if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)
  54. #define HEDLEY_GNUC_VERSION \
  55. HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
  56. #elif defined(__GNUC__)
  57. #define HEDLEY_GNUC_VERSION HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0)
  58. #endif
  59. #if defined(HEDLEY_GNUC_VERSION_CHECK)
  60. #undef HEDLEY_GNUC_VERSION_CHECK
  61. #endif
  62. #if defined(HEDLEY_GNUC_VERSION)
  63. #define HEDLEY_GNUC_VERSION_CHECK(major, minor, patch) \
  64. (HEDLEY_GNUC_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch))
  65. #else
  66. #define HEDLEY_GNUC_VERSION_CHECK(major, minor, patch) (0)
  67. #endif
  68. #if defined(HEDLEY_MSVC_VERSION)
  69. #undef HEDLEY_MSVC_VERSION
  70. #endif
  71. #if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000)
  72. #define HEDLEY_MSVC_VERSION \
  73. HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, \
  74. (_MSC_FULL_VER % 10000000) / 100000, \
  75. (_MSC_FULL_VER % 100000) / 100)
  76. #elif defined(_MSC_FULL_VER)
  77. #define HEDLEY_MSVC_VERSION \
  78. HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, \
  79. (_MSC_FULL_VER % 1000000) / 10000, \
  80. (_MSC_FULL_VER % 10000) / 10)
  81. #elif defined(_MSC_VER)
  82. #define HEDLEY_MSVC_VERSION \
  83. HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0)
  84. #endif
  85. #if defined(HEDLEY_MSVC_VERSION_CHECK)
  86. #undef HEDLEY_MSVC_VERSION_CHECK
  87. #endif
  88. #if !defined(_MSC_VER)
  89. #define HEDLEY_MSVC_VERSION_CHECK(major, minor, patch) (0)
  90. #elif defined(_MSC_VER) && (_MSC_VER >= 1400)
  91. #define HEDLEY_MSVC_VERSION_CHECK(major, minor, patch) \
  92. (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))
  93. #elif defined(_MSC_VER) && (_MSC_VER >= 1200)
  94. #define HEDLEY_MSVC_VERSION_CHECK(major, minor, patch) \
  95. (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))
  96. #else
  97. #define HEDLEY_MSVC_VERSION_CHECK(major, minor, patch) \
  98. (_MSC_VER >= ((major * 100) + (minor)))
  99. #endif
  100. #if defined(HEDLEY_INTEL_VERSION)
  101. #undef HEDLEY_INTEL_VERSION
  102. #endif
  103. #if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE)
  104. #define HEDLEY_INTEL_VERSION \
  105. HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, \
  106. __INTEL_COMPILER_UPDATE)
  107. #elif defined(__INTEL_COMPILER)
  108. #define HEDLEY_INTEL_VERSION \
  109. HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)
  110. #endif
  111. #if defined(HEDLEY_INTEL_VERSION_CHECK)
  112. #undef HEDLEY_INTEL_VERSION_CHECK
  113. #endif
  114. #if defined(HEDLEY_INTEL_VERSION)
  115. #define HEDLEY_INTEL_VERSION_CHECK(major, minor, patch) \
  116. (HEDLEY_INTEL_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch))
  117. #else
  118. #define HEDLEY_INTEL_VERSION_CHECK(major, minor, patch) (0)
  119. #endif
  120. #if defined(HEDLEY_PGI_VERSION)
  121. #undef HEDLEY_PGI_VERSION
  122. #endif
  123. #if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && \
  124. defined(__PGIC_PATCHLEVEL__)
  125. #define HEDLEY_PGI_VERSION \
  126. HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__)
  127. #endif
  128. #if defined(HEDLEY_PGI_VERSION_CHECK)
  129. #undef HEDLEY_PGI_VERSION_CHECK
  130. #endif
  131. #if defined(HEDLEY_PGI_VERSION)
  132. #define HEDLEY_PGI_VERSION_CHECK(major, minor, patch) \
  133. (HEDLEY_PGI_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch))
  134. #else
  135. #define HEDLEY_PGI_VERSION_CHECK(major, minor, patch) (0)
  136. #endif
  137. #if defined(HEDLEY_SUNPRO_VERSION)
  138. #undef HEDLEY_SUNPRO_VERSION
  139. #endif
  140. #if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)
  141. #define HEDLEY_SUNPRO_VERSION \
  142. HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + \
  143. ((__SUNPRO_C >> 12) & 0xf), \
  144. (((__SUNPRO_C >> 8) & 0xf) * 10) + \
  145. ((__SUNPRO_C >> 4) & 0xf), \
  146. (__SUNPRO_C & 0xf) * 10)
  147. #elif defined(__SUNPRO_C)
  148. #define HEDLEY_SUNPRO_VERSION \
  149. HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, \
  150. (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C)&0xf)
  151. #elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)
  152. #define HEDLEY_SUNPRO_VERSION \
  153. HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + \
  154. ((__SUNPRO_CC >> 12) & 0xf), \
  155. (((__SUNPRO_CC >> 8) & 0xf) * 10) + \
  156. ((__SUNPRO_CC >> 4) & 0xf), \
  157. (__SUNPRO_CC & 0xf) * 10)
  158. #elif defined(__SUNPRO_CC)
  159. #define HEDLEY_SUNPRO_VERSION \
  160. HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, \
  161. (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC)&0xf)
  162. #endif
  163. #if defined(HEDLEY_SUNPRO_VERSION_CHECK)
  164. #undef HEDLEY_SUNPRO_VERSION_CHECK
  165. #endif
  166. #if defined(HEDLEY_SUNPRO_VERSION)
  167. #define HEDLEY_SUNPRO_VERSION_CHECK(major, minor, patch) \
  168. (HEDLEY_SUNPRO_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch))
  169. #else
  170. #define HEDLEY_SUNPRO_VERSION_CHECK(major, minor, patch) (0)
  171. #endif
  172. #if defined(HEDLEY_EMSCRIPTEN_VERSION)
  173. #undef HEDLEY_EMSCRIPTEN_VERSION
  174. #endif
  175. #if defined(__EMSCRIPTEN__)
  176. #define HEDLEY_EMSCRIPTEN_VERSION \
  177. HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, \
  178. __EMSCRIPTEN_tiny__)
  179. #endif
  180. #if defined(HEDLEY_EMSCRIPTEN_VERSION_CHECK)
  181. #undef HEDLEY_EMSCRIPTEN_VERSION_CHECK
  182. #endif
  183. #if defined(HEDLEY_EMSCRIPTEN_VERSION)
  184. #define HEDLEY_EMSCRIPTEN_VERSION_CHECK(major, minor, patch) \
  185. (HEDLEY_EMSCRIPTEN_VERSION >= \
  186. HEDLEY_VERSION_ENCODE(major, minor, patch))
  187. #else
  188. #define HEDLEY_EMSCRIPTEN_VERSION_CHECK(major, minor, patch) (0)
  189. #endif
  190. #if defined(HEDLEY_ARM_VERSION)
  191. #undef HEDLEY_ARM_VERSION
  192. #endif
  193. #if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)
  194. #define HEDLEY_ARM_VERSION \
  195. HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, \
  196. (__ARMCOMPILER_VERSION % 1000000) / 10000, \
  197. (__ARMCOMPILER_VERSION % 10000) / 100)
  198. #elif defined(__CC_ARM) && defined(__ARMCC_VERSION)
  199. #define HEDLEY_ARM_VERSION \
  200. HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, \
  201. (__ARMCC_VERSION % 1000000) / 10000, \
  202. (__ARMCC_VERSION % 10000) / 100)
  203. #endif
  204. #if defined(HEDLEY_ARM_VERSION_CHECK)
  205. #undef HEDLEY_ARM_VERSION_CHECK
  206. #endif
  207. #if defined(HEDLEY_ARM_VERSION)
  208. #define HEDLEY_ARM_VERSION_CHECK(major, minor, patch) \
  209. (HEDLEY_ARM_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch))
  210. #else
  211. #define HEDLEY_ARM_VERSION_CHECK(major, minor, patch) (0)
  212. #endif
  213. #if defined(HEDLEY_IBM_VERSION)
  214. #undef HEDLEY_IBM_VERSION
  215. #endif
  216. #if defined(__ibmxl__)
  217. #define HEDLEY_IBM_VERSION \
  218. HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, \
  219. __ibmxl_modification__)
  220. #elif defined(__xlC__) && defined(__xlC_ver__)
  221. #define HEDLEY_IBM_VERSION \
  222. HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, \
  223. (__xlC_ver__ >> 8) & 0xff)
  224. #elif defined(__xlC__)
  225. #define HEDLEY_IBM_VERSION \
  226. HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0)
  227. #endif
  228. #if defined(HEDLEY_IBM_VERSION_CHECK)
  229. #undef HEDLEY_IBM_VERSION_CHECK
  230. #endif
  231. #if defined(HEDLEY_IBM_VERSION)
  232. #define HEDLEY_IBM_VERSION_CHECK(major, minor, patch) \
  233. (HEDLEY_IBM_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch))
  234. #else
  235. #define HEDLEY_IBM_VERSION_CHECK(major, minor, patch) (0)
  236. #endif
  237. #if defined(HEDLEY_TI_VERSION)
  238. #undef HEDLEY_TI_VERSION
  239. #endif
  240. #if defined(__TI_COMPILER_VERSION__)
  241. #define HEDLEY_TI_VERSION \
  242. HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, \
  243. (__TI_COMPILER_VERSION__ % 1000000) / 1000, \
  244. (__TI_COMPILER_VERSION__ % 1000))
  245. #endif
  246. #if defined(HEDLEY_TI_VERSION_CHECK)
  247. #undef HEDLEY_TI_VERSION_CHECK
  248. #endif
  249. #if defined(HEDLEY_TI_VERSION)
  250. #define HEDLEY_TI_VERSION_CHECK(major, minor, patch) \
  251. (HEDLEY_TI_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch))
  252. #else
  253. #define HEDLEY_TI_VERSION_CHECK(major, minor, patch) (0)
  254. #endif
  255. #if defined(HEDLEY_CRAY_VERSION)
  256. #undef HEDLEY_CRAY_VERSION
  257. #endif
  258. #if defined(_CRAYC)
  259. #if defined(_RELEASE_PATCHLEVEL)
  260. #define HEDLEY_CRAY_VERSION \
  261. HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, \
  262. _RELEASE_PATCHLEVEL)
  263. #else
  264. #define HEDLEY_CRAY_VERSION \
  265. HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0)
  266. #endif
  267. #endif
  268. #if defined(HEDLEY_CRAY_VERSION_CHECK)
  269. #undef HEDLEY_CRAY_VERSION_CHECK
  270. #endif
  271. #if defined(HEDLEY_CRAY_VERSION)
  272. #define HEDLEY_CRAY_VERSION_CHECK(major, minor, patch) \
  273. (HEDLEY_CRAY_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch))
  274. #else
  275. #define HEDLEY_CRAY_VERSION_CHECK(major, minor, patch) (0)
  276. #endif
  277. #if defined(HEDLEY_IAR_VERSION)
  278. #undef HEDLEY_IAR_VERSION
  279. #endif
  280. #if defined(__IAR_SYSTEMS_ICC__)
  281. #if __VER__ > 1000
  282. #define HEDLEY_IAR_VERSION \
  283. HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), \
  284. (__VER__ % 1000))
  285. #else
  286. #define HEDLEY_IAR_VERSION HEDLEY_VERSION_ENCODE(VER / 100, __VER__ % 100, 0)
  287. #endif
  288. #endif
  289. #if defined(HEDLEY_IAR_VERSION_CHECK)
  290. #undef HEDLEY_IAR_VERSION_CHECK
  291. #endif
  292. #if defined(HEDLEY_IAR_VERSION)
  293. #define HEDLEY_IAR_VERSION_CHECK(major, minor, patch) \
  294. (HEDLEY_IAR_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch))
  295. #else
  296. #define HEDLEY_IAR_VERSION_CHECK(major, minor, patch) (0)
  297. #endif
  298. #if defined(HEDLEY_TINYC_VERSION)
  299. #undef HEDLEY_TINYC_VERSION
  300. #endif
  301. #if defined(__TINYC__)
  302. #define HEDLEY_TINYC_VERSION \
  303. HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, \
  304. __TINYC__ % 100)
  305. #endif
  306. #if defined(HEDLEY_TINYC_VERSION_CHECK)
  307. #undef HEDLEY_TINYC_VERSION_CHECK
  308. #endif
  309. #if defined(HEDLEY_TINYC_VERSION)
  310. #define HEDLEY_TINYC_VERSION_CHECK(major, minor, patch) \
  311. (HEDLEY_TINYC_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch))
  312. #else
  313. #define HEDLEY_TINYC_VERSION_CHECK(major, minor, patch) (0)
  314. #endif
  315. #if defined(HEDLEY_DMC_VERSION)
  316. #undef HEDLEY_DMC_VERSION
  317. #endif
  318. #if defined(__DMC__)
  319. #define HEDLEY_DMC_VERSION \
  320. HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf)
  321. #endif
  322. #if defined(HEDLEY_DMC_VERSION_CHECK)
  323. #undef HEDLEY_DMC_VERSION_CHECK
  324. #endif
  325. #if defined(HEDLEY_DMC_VERSION)
  326. #define HEDLEY_DMC_VERSION_CHECK(major, minor, patch) \
  327. (HEDLEY_DMC_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch))
  328. #else
  329. #define HEDLEY_DMC_VERSION_CHECK(major, minor, patch) (0)
  330. #endif
  331. #if defined(HEDLEY_COMPCERT_VERSION)
  332. #undef HEDLEY_COMPCERT_VERSION
  333. #endif
  334. #if defined(__COMPCERT_VERSION__)
  335. #define HEDLEY_COMPCERT_VERSION \
  336. HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, \
  337. (__COMPCERT_VERSION__ / 100) % 100, \
  338. __COMPCERT_VERSION__ % 100)
  339. #endif
  340. #if defined(HEDLEY_COMPCERT_VERSION_CHECK)
  341. #undef HEDLEY_COMPCERT_VERSION_CHECK
  342. #endif
  343. #if defined(HEDLEY_COMPCERT_VERSION)
  344. #define HEDLEY_COMPCERT_VERSION_CHECK(major, minor, patch) \
  345. (HEDLEY_COMPCERT_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch))
  346. #else
  347. #define HEDLEY_COMPCERT_VERSION_CHECK(major, minor, patch) (0)
  348. #endif
  349. #if defined(HEDLEY_PELLES_VERSION)
  350. #undef HEDLEY_PELLES_VERSION
  351. #endif
  352. #if defined(__POCC__)
  353. #define HEDLEY_PELLES_VERSION \
  354. HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0)
  355. #endif
  356. #if defined(HEDLEY_PELLES_VERSION_CHECK)
  357. #undef HEDLEY_PELLES_VERSION_CHECK
  358. #endif
  359. #if defined(HEDLEY_PELLES_VERSION)
  360. #define HEDLEY_PELLES_VERSION_CHECK(major, minor, patch) \
  361. (HEDLEY_PELLES_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch))
  362. #else
  363. #define HEDLEY_PELLES_VERSION_CHECK(major, minor, patch) (0)
  364. #endif
  365. #if defined(HEDLEY_GCC_VERSION)
  366. #undef HEDLEY_GCC_VERSION
  367. #endif
  368. #if defined(HEDLEY_GNUC_VERSION) && !defined(__clang__) && \
  369. !defined(HEDLEY_INTEL_VERSION) && !defined(HEDLEY_PGI_VERSION) && \
  370. !defined(HEDLEY_ARM_VERSION) && !defined(HEDLEY_TI_VERSION) && \
  371. !defined(__COMPCERT__)
  372. #define HEDLEY_GCC_VERSION HEDLEY_GNUC_VERSION
  373. #endif
  374. #if defined(HEDLEY_GCC_VERSION_CHECK)
  375. #undef HEDLEY_GCC_VERSION_CHECK
  376. #endif
  377. #if defined(HEDLEY_GCC_VERSION)
  378. #define HEDLEY_GCC_VERSION_CHECK(major, minor, patch) \
  379. (HEDLEY_GCC_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch))
  380. #else
  381. #define HEDLEY_GCC_VERSION_CHECK(major, minor, patch) (0)
  382. #endif
  383. #if defined(HEDLEY_HAS_ATTRIBUTE)
  384. #undef HEDLEY_HAS_ATTRIBUTE
  385. #endif
  386. #if defined(__has_attribute)
  387. #define HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute)
  388. #else
  389. #define HEDLEY_HAS_ATTRIBUTE(attribute) (0)
  390. #endif
  391. #if defined(HEDLEY_GNUC_HAS_ATTRIBUTE)
  392. #undef HEDLEY_GNUC_HAS_ATTRIBUTE
  393. #endif
  394. #if defined(__has_attribute)
  395. #define HEDLEY_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
  396. __has_attribute(attribute)
  397. #else
  398. #define HEDLEY_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
  399. HEDLEY_GNUC_VERSION_CHECK(major, minor, patch)
  400. #endif
  401. #if defined(HEDLEY_GCC_HAS_ATTRIBUTE)
  402. #undef HEDLEY_GCC_HAS_ATTRIBUTE
  403. #endif
  404. #if defined(__has_attribute)
  405. #define HEDLEY_GCC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
  406. __has_attribute(attribute)
  407. #else
  408. #define HEDLEY_GCC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
  409. HEDLEY_GCC_VERSION_CHECK(major, minor, patch)
  410. #endif
  411. #if defined(HEDLEY_HAS_CPP_ATTRIBUTE)
  412. #undef HEDLEY_HAS_CPP_ATTRIBUTE
  413. #endif
  414. #if defined(__has_cpp_attribute) && defined(__cplusplus)
  415. #define HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute)
  416. #else
  417. #define HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0)
  418. #endif
  419. #if defined(HEDLEY_GNUC_HAS_CPP_ATTRIBUTE)
  420. #undef HEDLEY_GNUC_HAS_CPP_ATTRIBUTE
  421. #endif
  422. #if defined(__has_cpp_attribute) && defined(__cplusplus)
  423. #define HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute, major, minor, patch) \
  424. __has_cpp_attribute(attribute)
  425. #else
  426. #define HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute, major, minor, patch) \
  427. HEDLEY_GNUC_VERSION_CHECK(major, minor, patch)
  428. #endif
  429. #if defined(HEDLEY_GCC_HAS_CPP_ATTRIBUTE)
  430. #undef HEDLEY_GCC_HAS_CPP_ATTRIBUTE
  431. #endif
  432. #if defined(__has_cpp_attribute) && defined(__cplusplus)
  433. #define HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute, major, minor, patch) \
  434. __has_cpp_attribute(attribute)
  435. #else
  436. #define HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute, major, minor, patch) \
  437. HEDLEY_GCC_VERSION_CHECK(major, minor, patch)
  438. #endif
  439. #if defined(HEDLEY_HAS_BUILTIN)
  440. #undef HEDLEY_HAS_BUILTIN
  441. #endif
  442. #if defined(__has_builtin)
  443. #define HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin)
  444. #else
  445. #define HEDLEY_HAS_BUILTIN(builtin) (0)
  446. #endif
  447. #if defined(HEDLEY_GNUC_HAS_BUILTIN)
  448. #undef HEDLEY_GNUC_HAS_BUILTIN
  449. #endif
  450. #if defined(__has_builtin)
  451. #define HEDLEY_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \
  452. __has_builtin(builtin)
  453. #else
  454. #define HEDLEY_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \
  455. HEDLEY_GNUC_VERSION_CHECK(major, minor, patch)
  456. #endif
  457. #if defined(HEDLEY_GCC_HAS_BUILTIN)
  458. #undef HEDLEY_GCC_HAS_BUILTIN
  459. #endif
  460. #if defined(__has_builtin)
  461. #define HEDLEY_GCC_HAS_BUILTIN(builtin, major, minor, patch) \
  462. __has_builtin(builtin)
  463. #else
  464. #define HEDLEY_GCC_HAS_BUILTIN(builtin, major, minor, patch) \
  465. HEDLEY_GCC_VERSION_CHECK(major, minor, patch)
  466. #endif
  467. #if defined(HEDLEY_HAS_FEATURE)
  468. #undef HEDLEY_HAS_FEATURE
  469. #endif
  470. #if defined(__has_feature)
  471. #define HEDLEY_HAS_FEATURE(feature) __has_feature(feature)
  472. #else
  473. #define HEDLEY_HAS_FEATURE(feature) (0)
  474. #endif
  475. #if defined(HEDLEY_GNUC_HAS_FEATURE)
  476. #undef HEDLEY_GNUC_HAS_FEATURE
  477. #endif
  478. #if defined(__has_feature)
  479. #define HEDLEY_GNUC_HAS_FEATURE(feature, major, minor, patch) \
  480. __has_feature(feature)
  481. #else
  482. #define HEDLEY_GNUC_HAS_FEATURE(feature, major, minor, patch) \
  483. HEDLEY_GNUC_VERSION_CHECK(major, minor, patch)
  484. #endif
  485. #if defined(HEDLEY_GCC_HAS_FEATURE)
  486. #undef HEDLEY_GCC_HAS_FEATURE
  487. #endif
  488. #if defined(__has_feature)
  489. #define HEDLEY_GCC_HAS_FEATURE(feature, major, minor, patch) \
  490. __has_feature(feature)
  491. #else
  492. #define HEDLEY_GCC_HAS_FEATURE(feature, major, minor, patch) \
  493. HEDLEY_GCC_VERSION_CHECK(major, minor, patch)
  494. #endif
  495. #if defined(HEDLEY_HAS_EXTENSION)
  496. #undef HEDLEY_HAS_EXTENSION
  497. #endif
  498. #if defined(__has_extension)
  499. #define HEDLEY_HAS_EXTENSION(extension) __has_extension(extension)
  500. #else
  501. #define HEDLEY_HAS_EXTENSION(extension) (0)
  502. #endif
  503. #if defined(HEDLEY_GNUC_HAS_EXTENSION)
  504. #undef HEDLEY_GNUC_HAS_EXTENSION
  505. #endif
  506. #if defined(__has_extension)
  507. #define HEDLEY_GNUC_HAS_EXTENSION(extension, major, minor, patch) \
  508. __has_extension(extension)
  509. #else
  510. #define HEDLEY_GNUC_HAS_EXTENSION(extension, major, minor, patch) \
  511. HEDLEY_GNUC_VERSION_CHECK(major, minor, patch)
  512. #endif
  513. #if defined(HEDLEY_GCC_HAS_EXTENSION)
  514. #undef HEDLEY_GCC_HAS_EXTENSION
  515. #endif
  516. #if defined(__has_extension)
  517. #define HEDLEY_GCC_HAS_EXTENSION(extension, major, minor, patch) \
  518. __has_extension(extension)
  519. #else
  520. #define HEDLEY_GCC_HAS_EXTENSION(extension, major, minor, patch) \
  521. HEDLEY_GCC_VERSION_CHECK(major, minor, patch)
  522. #endif
  523. #if defined(HEDLEY_HAS_DECLSPEC_ATTRIBUTE)
  524. #undef HEDLEY_HAS_DECLSPEC_ATTRIBUTE
  525. #endif
  526. #if defined(__has_declspec_attribute)
  527. #define HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) \
  528. __has_declspec_attribute(attribute)
  529. #else
  530. #define HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0)
  531. #endif
  532. #if defined(HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE)
  533. #undef HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE
  534. #endif
  535. #if defined(__has_declspec_attribute)
  536. #define HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute, major, minor, patch) \
  537. __has_declspec_attribute(attribute)
  538. #else
  539. #define HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute, major, minor, patch) \
  540. HEDLEY_GNUC_VERSION_CHECK(major, minor, patch)
  541. #endif
  542. #if defined(HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE)
  543. #undef HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE
  544. #endif
  545. #if defined(__has_declspec_attribute)
  546. #define HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute, major, minor, patch) \
  547. __has_declspec_attribute(attribute)
  548. #else
  549. #define HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute, major, minor, patch) \
  550. HEDLEY_GCC_VERSION_CHECK(major, minor, patch)
  551. #endif
  552. #if defined(HEDLEY_HAS_WARNING)
  553. #undef HEDLEY_HAS_WARNING
  554. #endif
  555. #if defined(__has_warning)
  556. #define HEDLEY_HAS_WARNING(warning) __has_warning(warning)
  557. #else
  558. #define HEDLEY_HAS_WARNING(warning) (0)
  559. #endif
  560. #if defined(HEDLEY_GNUC_HAS_WARNING)
  561. #undef HEDLEY_GNUC_HAS_WARNING
  562. #endif
  563. #if defined(__has_warning)
  564. #define HEDLEY_GNUC_HAS_WARNING(warning, major, minor, patch) \
  565. __has_warning(warning)
  566. #else
  567. #define HEDLEY_GNUC_HAS_WARNING(warning, major, minor, patch) \
  568. HEDLEY_GNUC_VERSION_CHECK(major, minor, patch)
  569. #endif
  570. #if defined(HEDLEY_GCC_HAS_WARNING)
  571. #undef HEDLEY_GCC_HAS_WARNING
  572. #endif
  573. #if defined(__has_warning)
  574. #define HEDLEY_GCC_HAS_WARNING(warning, major, minor, patch) \
  575. __has_warning(warning)
  576. #else
  577. #define HEDLEY_GCC_HAS_WARNING(warning, major, minor, patch) \
  578. HEDLEY_GCC_VERSION_CHECK(major, minor, patch)
  579. #endif
  580. #if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
  581. defined(__clang__) || HEDLEY_GCC_VERSION_CHECK(3, 0, 0) || \
  582. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  583. HEDLEY_IAR_VERSION_CHECK(8, 0, 0) || \
  584. HEDLEY_PGI_VERSION_CHECK(18, 4, 0) || \
  585. HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
  586. HEDLEY_TI_VERSION_CHECK(6, 0, 0) || \
  587. HEDLEY_CRAY_VERSION_CHECK(5, 0, 0) || \
  588. HEDLEY_TINYC_VERSION_CHECK(0, 9, 17) || \
  589. HEDLEY_SUNPRO_VERSION_CHECK(8, 0, 0) || \
  590. (HEDLEY_IBM_VERSION_CHECK(10, 1, 0) && defined(__C99_PRAGMA_OPERATOR))
  591. #define HEDLEY_PRAGMA(value) _Pragma(#value)
  592. #elif HEDLEY_MSVC_VERSION_CHECK(15, 0, 0)
  593. #define HEDLEY_PRAGMA(value) __pragma(value)
  594. #else
  595. #define HEDLEY_PRAGMA(value)
  596. #endif
  597. #if defined(HEDLEY_DIAGNOSTIC_PUSH)
  598. #undef HEDLEY_DIAGNOSTIC_PUSH
  599. #endif
  600. #if defined(HEDLEY_DIAGNOSTIC_POP)
  601. #undef HEDLEY_DIAGNOSTIC_POP
  602. #endif
  603. #if defined(__clang__)
  604. #define HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push")
  605. #define HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop")
  606. #elif HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
  607. #define HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)")
  608. #define HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)")
  609. #elif HEDLEY_GCC_VERSION_CHECK(4, 6, 0)
  610. #define HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push")
  611. #define HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop")
  612. #elif HEDLEY_MSVC_VERSION_CHECK(15, 0, 0)
  613. #define HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push))
  614. #define HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop))
  615. #elif HEDLEY_ARM_VERSION_CHECK(5, 6, 0)
  616. #define HEDLEY_DIAGNOSTIC_PUSH _Pragma("push")
  617. #define HEDLEY_DIAGNOSTIC_POP _Pragma("pop")
  618. #elif HEDLEY_TI_VERSION_CHECK(8, 1, 0)
  619. #define HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push")
  620. #define HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop")
  621. #elif HEDLEY_PELLES_VERSION_CHECK(2, 90, 0)
  622. #define HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)")
  623. #define HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)")
  624. #else
  625. #define HEDLEY_DIAGNOSTIC_PUSH
  626. #define HEDLEY_DIAGNOSTIC_POP
  627. #endif
  628. #if defined(HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED)
  629. #undef HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
  630. #endif
  631. #if HEDLEY_HAS_WARNING("-Wdeprecated-declarations")
  632. #define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED \
  633. _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
  634. #elif HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
  635. #define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED \
  636. _Pragma("warning(disable:1478 1786)")
  637. #elif HEDLEY_PGI_VERSION_CHECK(17, 10, 0)
  638. #define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444")
  639. #elif HEDLEY_GCC_VERSION_CHECK(4, 3, 0)
  640. #define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED \
  641. _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
  642. #elif HEDLEY_MSVC_VERSION_CHECK(15, 0, 0)
  643. #define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable : 4996))
  644. #elif HEDLEY_TI_VERSION_CHECK(8, 0, 0)
  645. #define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718")
  646. #elif HEDLEY_SUNPRO_VERSION_CHECK(5, 13, 0) && !defined(__cplusplus)
  647. #define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED \
  648. _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)")
  649. #elif HEDLEY_SUNPRO_VERSION_CHECK(5, 13, 0) && defined(__cplusplus)
  650. #define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED \
  651. _Pragma("error_messages(off,symdeprecated,symdeprecated2)")
  652. #elif HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
  653. #define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED \
  654. _Pragma("diag_suppress=Pe1444,Pe1215")
  655. #elif HEDLEY_PELLES_VERSION_CHECK(2, 90, 0)
  656. #define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)")
  657. #else
  658. #define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
  659. #endif
  660. #if defined(HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS)
  661. #undef HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
  662. #endif
  663. #if HEDLEY_HAS_WARNING("-Wunknown-pragmas")
  664. #define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
  665. _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
  666. #elif HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
  667. #define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
  668. _Pragma("warning(disable:161)")
  669. #elif HEDLEY_PGI_VERSION_CHECK(17, 10, 0)
  670. #define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
  671. #elif HEDLEY_GCC_VERSION_CHECK(4, 3, 0)
  672. #define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
  673. _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
  674. #elif HEDLEY_MSVC_VERSION_CHECK(15, 0, 0)
  675. #define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
  676. __pragma(warning(disable : 4068))
  677. #elif HEDLEY_TI_VERSION_CHECK(8, 0, 0)
  678. #define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
  679. #elif HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
  680. #define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
  681. #else
  682. #define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
  683. #endif
  684. #if defined(HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL)
  685. #undef HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
  686. #endif
  687. #if HEDLEY_HAS_WARNING("-Wcast-qual")
  688. #define HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \
  689. _Pragma("clang diagnostic ignored \"-Wcast-qual\"")
  690. #elif HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
  691. #define HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \
  692. _Pragma("warning(disable:2203 2331)")
  693. #elif HEDLEY_GCC_VERSION_CHECK(3, 0, 0)
  694. #define HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \
  695. _Pragma("GCC diagnostic ignored \"-Wcast-qual\"")
  696. #else
  697. #define HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
  698. #endif
  699. #if defined(HEDLEY_DEPRECATED)
  700. #undef HEDLEY_DEPRECATED
  701. #endif
  702. #if defined(HEDLEY_DEPRECATED_FOR)
  703. #undef HEDLEY_DEPRECATED_FOR
  704. #endif
  705. #if defined(__cplusplus) && (__cplusplus >= 201402L)
  706. #define HEDLEY_DEPRECATED(since) [[deprecated("Since " #since)]]
  707. #define HEDLEY_DEPRECATED_FOR(since, replacement) \
  708. [[deprecated("Since " #since "; use " #replacement)]]
  709. #elif HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) || \
  710. HEDLEY_GCC_VERSION_CHECK(4, 5, 0) || \
  711. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  712. HEDLEY_ARM_VERSION_CHECK(5, 6, 0) || \
  713. HEDLEY_SUNPRO_VERSION_CHECK(5, 13, 0) || \
  714. HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || \
  715. HEDLEY_TI_VERSION_CHECK(8, 3, 0)
  716. #define HEDLEY_DEPRECATED(since) \
  717. __attribute__((__deprecated__("Since " #since)))
  718. #define HEDLEY_DEPRECATED_FOR(since, replacement) \
  719. __attribute__((__deprecated__("Since " #since "; use " #replacement)))
  720. #elif HEDLEY_HAS_ATTRIBUTE(deprecated) || HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || \
  721. HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
  722. HEDLEY_TI_VERSION_CHECK(8, 0, 0) || \
  723. (HEDLEY_TI_VERSION_CHECK(7, 3, 0) && \
  724. defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
  725. #define HEDLEY_DEPRECATED(since) __attribute__((__deprecated__))
  726. #define HEDLEY_DEPRECATED_FOR(since, replacement) \
  727. __attribute__((__deprecated__))
  728. #elif HEDLEY_MSVC_VERSION_CHECK(14, 0, 0)
  729. #define HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " #since))
  730. #define HEDLEY_DEPRECATED_FOR(since, replacement) \
  731. __declspec(deprecated("Since " #since "; use " #replacement))
  732. #elif HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || \
  733. HEDLEY_PELLES_VERSION_CHECK(6, 50, 0)
  734. #define HEDLEY_DEPRECATED(since) __declspec(deprecated)
  735. #define HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated)
  736. #elif HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
  737. #define HEDLEY_DEPRECATED(since) _Pragma("deprecated")
  738. #define HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated")
  739. #else
  740. #define HEDLEY_DEPRECATED(since)
  741. #define HEDLEY_DEPRECATED_FOR(since, replacement)
  742. #endif
  743. #if defined(HEDLEY_UNAVAILABLE)
  744. #undef HEDLEY_UNAVAILABLE
  745. #endif
  746. #if HEDLEY_HAS_ATTRIBUTE(warning) || HEDLEY_GCC_VERSION_CHECK(4, 3, 0) || \
  747. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
  748. #define HEDLEY_UNAVAILABLE(available_since) \
  749. __attribute__((__warning__("Not available until " #available_since)))
  750. #else
  751. #define HEDLEY_UNAVAILABLE(available_since)
  752. #endif
  753. #if defined(HEDLEY_WARN_UNUSED_RESULT)
  754. #undef HEDLEY_WARN_UNUSED_RESULT
  755. #endif
  756. #if defined(__cplusplus) && (__cplusplus >= 201703L)
  757. #define HEDLEY_WARN_UNUSED_RESULT [[nodiscard]]
  758. #elif HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \
  759. HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || \
  760. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  761. HEDLEY_TI_VERSION_CHECK(8, 0, 0) || \
  762. (HEDLEY_TI_VERSION_CHECK(7, 3, 0) && \
  763. defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
  764. (HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0) && defined(__cplusplus)) || \
  765. HEDLEY_PGI_VERSION_CHECK(17, 10, 0)
  766. #define HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
  767. #elif defined(_Check_return_) /* SAL */
  768. #define HEDLEY_WARN_UNUSED_RESULT _Check_return_
  769. #else
  770. #define HEDLEY_WARN_UNUSED_RESULT
  771. #endif
  772. #if defined(HEDLEY_SENTINEL)
  773. #undef HEDLEY_SENTINEL
  774. #endif
  775. #if HEDLEY_HAS_ATTRIBUTE(sentinel) || HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || \
  776. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  777. HEDLEY_ARM_VERSION_CHECK(5, 4, 0)
  778. #define HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position)))
  779. #else
  780. #define HEDLEY_SENTINEL(position)
  781. #endif
  782. #if defined(HEDLEY_NO_RETURN)
  783. #undef HEDLEY_NO_RETURN
  784. #endif
  785. #if HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
  786. #define HEDLEY_NO_RETURN __noreturn
  787. #elif HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
  788. #define HEDLEY_NO_RETURN __attribute__((__noreturn__))
  789. #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
  790. #define HEDLEY_NO_RETURN _Noreturn
  791. #elif defined(__cplusplus) && (__cplusplus >= 201103L)
  792. #define HEDLEY_NO_RETURN [[noreturn]]
  793. #elif HEDLEY_HAS_ATTRIBUTE(noreturn) || HEDLEY_GCC_VERSION_CHECK(3, 2, 0) || \
  794. HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
  795. HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
  796. HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
  797. HEDLEY_TI_VERSION_CHECK(18, 0, 0) || \
  798. (HEDLEY_TI_VERSION_CHECK(17, 3, 0) && \
  799. defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
  800. #define HEDLEY_NO_RETURN __attribute__((__noreturn__))
  801. #elif HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0)
  802. #define HEDLEY_NO_RETURN _Pragma("does_not_return")
  803. #elif HEDLEY_MSVC_VERSION_CHECK(13, 10, 0)
  804. #define HEDLEY_NO_RETURN __declspec(noreturn)
  805. #elif HEDLEY_TI_VERSION_CHECK(6, 0, 0) && defined(__cplusplus)
  806. #define HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;")
  807. #elif HEDLEY_COMPCERT_VERSION_CHECK(3, 2, 0)
  808. #define HEDLEY_NO_RETURN __attribute((noreturn))
  809. #elif HEDLEY_PELLES_VERSION_CHECK(9, 0, 0)
  810. #define HEDLEY_NO_RETURN __declspec(noreturn)
  811. #else
  812. #define HEDLEY_NO_RETURN
  813. #endif
  814. #if defined(HEDLEY_UNREACHABLE)
  815. #undef HEDLEY_UNREACHABLE
  816. #endif
  817. #if defined(HEDLEY_UNREACHABLE_RETURN)
  818. #undef HEDLEY_UNREACHABLE_RETURN
  819. #endif
  820. #if (HEDLEY_HAS_BUILTIN(__builtin_unreachable) && \
  821. (!defined(HEDLEY_ARM_VERSION))) || \
  822. HEDLEY_GCC_VERSION_CHECK(4, 5, 0) || \
  823. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  824. HEDLEY_IBM_VERSION_CHECK(13, 1, 5)
  825. #define HEDLEY_UNREACHABLE() __builtin_unreachable()
  826. #elif HEDLEY_MSVC_VERSION_CHECK(13, 10, 0)
  827. #define HEDLEY_UNREACHABLE() __assume(0)
  828. #elif HEDLEY_TI_VERSION_CHECK(6, 0, 0)
  829. #if defined(__cplusplus)
  830. #define HEDLEY_UNREACHABLE() std::_nassert(0)
  831. #else
  832. #define HEDLEY_UNREACHABLE() _nassert(0)
  833. #endif
  834. #define HEDLEY_UNREACHABLE_RETURN(value) return value
  835. #elif defined(EXIT_FAILURE)
  836. #define HEDLEY_UNREACHABLE() abort()
  837. #else
  838. #define HEDLEY_UNREACHABLE()
  839. #define HEDLEY_UNREACHABLE_RETURN(value) return value
  840. #endif
  841. #if !defined(HEDLEY_UNREACHABLE_RETURN)
  842. #define HEDLEY_UNREACHABLE_RETURN(value) HEDLEY_UNREACHABLE()
  843. #endif
  844. #if defined(HEDLEY_ASSUME)
  845. #undef HEDLEY_ASSUME
  846. #endif
  847. #if HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
  848. #define HEDLEY_ASSUME(expr) __assume(expr)
  849. #elif HEDLEY_HAS_BUILTIN(__builtin_assume)
  850. #define HEDLEY_ASSUME(expr) __builtin_assume(expr)
  851. #elif HEDLEY_TI_VERSION_CHECK(6, 0, 0)
  852. #if defined(__cplusplus)
  853. #define HEDLEY_ASSUME(expr) std::_nassert(expr)
  854. #else
  855. #define HEDLEY_ASSUME(expr) _nassert(expr)
  856. #endif
  857. #elif (HEDLEY_HAS_BUILTIN(__builtin_unreachable) && \
  858. !defined(HEDLEY_ARM_VERSION)) || \
  859. HEDLEY_GCC_VERSION_CHECK(4, 5, 0) || \
  860. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  861. HEDLEY_IBM_VERSION_CHECK(13, 1, 5)
  862. #define HEDLEY_ASSUME(expr) ((void)((expr) ? 1 : (__builtin_unreachable(), 1)))
  863. #else
  864. #define HEDLEY_ASSUME(expr) ((void)(expr))
  865. #endif
  866. HEDLEY_DIAGNOSTIC_PUSH
  867. #if HEDLEY_HAS_WARNING("-Wvariadic-macros") || HEDLEY_GCC_VERSION_CHECK(4, 0, 0)
  868. #if defined(__clang__)
  869. #pragma clang diagnostic ignored "-Wvariadic-macros"
  870. #elif defined(HEDLEY_GCC_VERSION)
  871. #pragma GCC diagnostic ignored "-Wvariadic-macros"
  872. #endif
  873. #endif
  874. #if defined(HEDLEY_NON_NULL)
  875. #undef HEDLEY_NON_NULL
  876. #endif
  877. #if HEDLEY_HAS_ATTRIBUTE(nonnull) || HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || \
  878. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  879. HEDLEY_ARM_VERSION_CHECK(4, 1, 0)
  880. #define HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__)))
  881. #else
  882. #define HEDLEY_NON_NULL(...)
  883. #endif
  884. HEDLEY_DIAGNOSTIC_POP
  885. #if defined(HEDLEY_PRINTF_FORMAT)
  886. #undef HEDLEY_PRINTF_FORMAT
  887. #endif
  888. #if defined(__MINGW32__) && HEDLEY_GCC_HAS_ATTRIBUTE(format, 4, 4, 0) && \
  889. !defined(__USE_MINGW_ANSI_STDIO)
  890. #define HEDLEY_PRINTF_FORMAT(string_idx, first_to_check) \
  891. __attribute__((__format__(ms_printf, string_idx, first_to_check)))
  892. #elif defined(__MINGW32__) && HEDLEY_GCC_HAS_ATTRIBUTE(format, 4, 4, 0) && \
  893. defined(__USE_MINGW_ANSI_STDIO)
  894. #define HEDLEY_PRINTF_FORMAT(string_idx, first_to_check) \
  895. __attribute__((__format__(gnu_printf, string_idx, first_to_check)))
  896. #elif HEDLEY_HAS_ATTRIBUTE(format) || HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || \
  897. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  898. HEDLEY_ARM_VERSION_CHECK(5, 6, 0) || \
  899. HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
  900. HEDLEY_TI_VERSION_CHECK(8, 0, 0) || \
  901. (HEDLEY_TI_VERSION_CHECK(7, 3, 0) && \
  902. defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
  903. #define HEDLEY_PRINTF_FORMAT(string_idx, first_to_check) \
  904. __attribute__((__format__(__printf__, string_idx, first_to_check)))
  905. #elif HEDLEY_PELLES_VERSION_CHECK(6, 0, 0)
  906. #define HEDLEY_PRINTF_FORMAT(string_idx, first_to_check) \
  907. __declspec(vaformat(printf, string_idx, first_to_check))
  908. #else
  909. #define HEDLEY_PRINTF_FORMAT(string_idx, first_to_check)
  910. #endif
  911. #if defined(HEDLEY_CONSTEXPR)
  912. #undef HEDLEY_CONSTEXPR
  913. #endif
  914. #if defined(__cplusplus)
  915. #if __cplusplus >= 201103L
  916. #define HEDLEY_CONSTEXPR constexpr
  917. #endif
  918. #endif
  919. #if !defined(HEDLEY_CONSTEXPR)
  920. #define HEDLEY_CONSTEXPR
  921. #endif
  922. #if defined(HEDLEY_PREDICT)
  923. #undef HEDLEY_PREDICT
  924. #endif
  925. #if defined(HEDLEY_LIKELY)
  926. #undef HEDLEY_LIKELY
  927. #endif
  928. #if defined(HEDLEY_UNLIKELY)
  929. #undef HEDLEY_UNLIKELY
  930. #endif
  931. #if defined(HEDLEY_UNPREDICTABLE)
  932. #undef HEDLEY_UNPREDICTABLE
  933. #endif
  934. #if HEDLEY_HAS_BUILTIN(__builtin_unpredictable)
  935. #define HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable(!!(expr))
  936. #endif
  937. #if HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) || \
  938. HEDLEY_GCC_VERSION_CHECK(9, 0, 0)
  939. #define HEDLEY_PREDICT(expr, value, probability) \
  940. __builtin_expect_with_probability(expr, value, probability)
  941. #define HEDLEY_PREDICT_TRUE(expr, probability) \
  942. __builtin_expect_with_probability(!!(expr), 1, probability)
  943. #define HEDLEY_PREDICT_FALSE(expr, probability) \
  944. __builtin_expect_with_probability(!!(expr), 0, probability)
  945. #define HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1)
  946. #define HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0)
  947. #if !defined(HEDLEY_BUILTIN_UNPREDICTABLE)
  948. #define HEDLEY_BUILTIN_UNPREDICTABLE(expr) \
  949. __builtin_expect_with_probability(!!(expr), 1, 0.5)
  950. #endif
  951. #elif HEDLEY_HAS_BUILTIN(__builtin_expect) || \
  952. HEDLEY_GCC_VERSION_CHECK(3, 0, 0) || \
  953. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  954. (HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0) && defined(__cplusplus)) || \
  955. HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
  956. HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
  957. HEDLEY_TI_VERSION_CHECK(6, 1, 0) || \
  958. HEDLEY_TINYC_VERSION_CHECK(0, 9, 27)
  959. #define HEDLEY_PREDICT(expr, expected, probability) \
  960. (((probability) >= 0.9) ? __builtin_expect(!!(expr), (expected)) \
  961. : (((void)(expected)), !!(expr)))
  962. #define HEDLEY_PREDICT_TRUE(expr, probability) \
  963. (__extension__({ \
  964. HEDLEY_CONSTEXPR double hedley_probability_ = (probability); \
  965. ((hedley_probability_ >= 0.9) \
  966. ? __builtin_expect(!!(expr), 1) \
  967. : ((hedley_probability_ <= 0.1) \
  968. ? __builtin_expect(!!(expr), 0) \
  969. : !!(expr))); \
  970. }))
  971. #define HEDLEY_PREDICT_FALSE(expr, probability) \
  972. (__extension__({ \
  973. HEDLEY_CONSTEXPR double hedley_probability_ = (probability); \
  974. ((hedley_probability_ >= 0.9) \
  975. ? __builtin_expect(!!(expr), 0) \
  976. : ((hedley_probability_ <= 0.1) \
  977. ? __builtin_expect(!!(expr), 1) \
  978. : !!(expr))); \
  979. }))
  980. #define HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1)
  981. #define HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0)
  982. #else
  983. #define HEDLEY_PREDICT(expr, expected, probability) \
  984. (((void)(expected)), !!(expr))
  985. #define HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr))
  986. #define HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr))
  987. #define HEDLEY_LIKELY(expr) (!!(expr))
  988. #define HEDLEY_UNLIKELY(expr) (!!(expr))
  989. #endif
  990. #if !defined(HEDLEY_UNPREDICTABLE)
  991. #define HEDLEY_UNPREDICTABLE(expr) HEDLEY_PREDICT(expr, 1, 0.5)
  992. #endif
  993. #if defined(HEDLEY_MALLOC)
  994. #undef HEDLEY_MALLOC
  995. #endif
  996. #if HEDLEY_HAS_ATTRIBUTE(malloc) || HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || \
  997. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  998. HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
  999. HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
  1000. HEDLEY_IBM_VERSION_CHECK(12, 1, 0) || \
  1001. HEDLEY_TI_VERSION_CHECK(8, 0, 0) || \
  1002. (HEDLEY_TI_VERSION_CHECK(7, 3, 0) && \
  1003. defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
  1004. #define HEDLEY_MALLOC __attribute__((__malloc__))
  1005. #elif HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0)
  1006. #define HEDLEY_MALLOC _Pragma("returns_new_memory")
  1007. #elif HEDLEY_MSVC_VERSION_CHECK(14, 0, 0)
  1008. #define HEDLEY_MALLOC __declspec(restrict)
  1009. #else
  1010. #define HEDLEY_MALLOC
  1011. #endif
  1012. #if defined(HEDLEY_PURE)
  1013. #undef HEDLEY_PURE
  1014. #endif
  1015. #if HEDLEY_HAS_ATTRIBUTE(pure) || HEDLEY_GCC_VERSION_CHECK(2, 96, 0) || \
  1016. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  1017. HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
  1018. HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
  1019. HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
  1020. HEDLEY_TI_VERSION_CHECK(8, 0, 0) || \
  1021. (HEDLEY_TI_VERSION_CHECK(7, 3, 0) && \
  1022. defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
  1023. HEDLEY_PGI_VERSION_CHECK(17, 10, 0)
  1024. #define HEDLEY_PURE __attribute__((__pure__))
  1025. #elif HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0)
  1026. #define HEDLEY_PURE _Pragma("does_not_write_global_data")
  1027. #elif HEDLEY_TI_VERSION_CHECK(6, 0, 0) && defined(__cplusplus)
  1028. #define HEDLEY_PURE _Pragma("FUNC_IS_PURE;")
  1029. #else
  1030. #define HEDLEY_PURE
  1031. #endif
  1032. #if defined(HEDLEY_CONST)
  1033. #undef HEDLEY_CONST
  1034. #endif
  1035. #if HEDLEY_HAS_ATTRIBUTE(const) || HEDLEY_GCC_VERSION_CHECK(2, 5, 0) || \
  1036. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  1037. HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
  1038. HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
  1039. HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
  1040. HEDLEY_TI_VERSION_CHECK(8, 0, 0) || \
  1041. (HEDLEY_TI_VERSION_CHECK(7, 3, 0) && \
  1042. defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
  1043. HEDLEY_PGI_VERSION_CHECK(17, 10, 0)
  1044. #define HEDLEY_CONST __attribute__((__const__))
  1045. #elif HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0)
  1046. #define HEDLEY_CONST _Pragma("no_side_effect")
  1047. #else
  1048. #define HEDLEY_CONST HEDLEY_PURE
  1049. #endif
  1050. #if defined(HEDLEY_RESTRICT)
  1051. #undef HEDLEY_RESTRICT
  1052. #endif
  1053. #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
  1054. !defined(__cplusplus)
  1055. #define HEDLEY_RESTRICT restrict
  1056. #elif HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || \
  1057. HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) || \
  1058. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  1059. HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
  1060. HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
  1061. HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || \
  1062. HEDLEY_TI_VERSION_CHECK(8, 0, 0) || \
  1063. (HEDLEY_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus)) || \
  1064. HEDLEY_IAR_VERSION_CHECK(8, 0, 0) || defined(__clang__)
  1065. #define HEDLEY_RESTRICT __restrict
  1066. #elif HEDLEY_SUNPRO_VERSION_CHECK(5, 3, 0) && !defined(__cplusplus)
  1067. #define HEDLEY_RESTRICT _Restrict
  1068. #else
  1069. #define HEDLEY_RESTRICT
  1070. #endif
  1071. #if defined(HEDLEY_INLINE)
  1072. #undef HEDLEY_INLINE
  1073. #endif
  1074. #if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
  1075. (defined(__cplusplus) && (__cplusplus >= 199711L))
  1076. #define HEDLEY_INLINE inline
  1077. #elif defined(HEDLEY_GCC_VERSION) || HEDLEY_ARM_VERSION_CHECK(6, 2, 0)
  1078. #define HEDLEY_INLINE __inline__
  1079. #elif HEDLEY_MSVC_VERSION_CHECK(12, 0, 0) || \
  1080. HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || HEDLEY_TI_VERSION_CHECK(8, 0, 0)
  1081. #define HEDLEY_INLINE __inline
  1082. #else
  1083. #define HEDLEY_INLINE
  1084. #endif
  1085. #if defined(HEDLEY_ALWAYS_INLINE)
  1086. #undef HEDLEY_ALWAYS_INLINE
  1087. #endif
  1088. #if HEDLEY_HAS_ATTRIBUTE(always_inline) || \
  1089. HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || \
  1090. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  1091. HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
  1092. HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
  1093. HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
  1094. HEDLEY_TI_VERSION_CHECK(8, 0, 0) || \
  1095. (HEDLEY_TI_VERSION_CHECK(7, 3, 0) && \
  1096. defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
  1097. #define HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) HEDLEY_INLINE
  1098. #elif HEDLEY_MSVC_VERSION_CHECK(12, 0, 0)
  1099. #define HEDLEY_ALWAYS_INLINE __forceinline
  1100. #elif HEDLEY_TI_VERSION_CHECK(7, 0, 0) && defined(__cplusplus)
  1101. #define HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;")
  1102. #elif HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
  1103. #define HEDLEY_ALWAYS_INLINE _Pragma("inline=forced")
  1104. #else
  1105. #define HEDLEY_ALWAYS_INLINE HEDLEY_INLINE
  1106. #endif
  1107. #if defined(HEDLEY_NEVER_INLINE)
  1108. #undef HEDLEY_NEVER_INLINE
  1109. #endif
  1110. #if HEDLEY_HAS_ATTRIBUTE(noinline) || HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || \
  1111. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  1112. HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
  1113. HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
  1114. HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
  1115. HEDLEY_TI_VERSION_CHECK(8, 0, 0) || \
  1116. (HEDLEY_TI_VERSION_CHECK(7, 3, 0) && \
  1117. defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
  1118. #define HEDLEY_NEVER_INLINE __attribute__((__noinline__))
  1119. #elif HEDLEY_MSVC_VERSION_CHECK(13, 10, 0)
  1120. #define HEDLEY_NEVER_INLINE __declspec(noinline)
  1121. #elif HEDLEY_PGI_VERSION_CHECK(10, 2, 0)
  1122. #define HEDLEY_NEVER_INLINE _Pragma("noinline")
  1123. #elif HEDLEY_TI_VERSION_CHECK(6, 0, 0) && defined(__cplusplus)
  1124. #define HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;")
  1125. #elif HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
  1126. #define HEDLEY_NEVER_INLINE _Pragma("inline=never")
  1127. #elif HEDLEY_COMPCERT_VERSION_CHECK(3, 2, 0)
  1128. #define HEDLEY_NEVER_INLINE __attribute((noinline))
  1129. #elif HEDLEY_PELLES_VERSION_CHECK(9, 0, 0)
  1130. #define HEDLEY_NEVER_INLINE __declspec(noinline)
  1131. #else
  1132. #define HEDLEY_NEVER_INLINE
  1133. #endif
  1134. #if defined(HEDLEY_PRIVATE)
  1135. #undef HEDLEY_PRIVATE
  1136. #endif
  1137. #if defined(HEDLEY_PUBLIC)
  1138. #undef HEDLEY_PUBLIC
  1139. #endif
  1140. #if defined(HEDLEY_IMPORT)
  1141. #undef HEDLEY_IMPORT
  1142. #endif
  1143. #if defined(_WIN32) || defined(__CYGWIN__)
  1144. #define HEDLEY_PRIVATE
  1145. #define HEDLEY_PUBLIC __declspec(dllexport)
  1146. #define HEDLEY_IMPORT __declspec(dllimport)
  1147. #else
  1148. #if HEDLEY_HAS_ATTRIBUTE(visibility) || HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || \
  1149. HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
  1150. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  1151. HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
  1152. HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || \
  1153. HEDLEY_TI_VERSION_CHECK(8, 0, 0) || \
  1154. (HEDLEY_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_EABI__) && \
  1155. defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
  1156. #define HEDLEY_PRIVATE __attribute__((__visibility__("hidden")))
  1157. #define HEDLEY_PUBLIC __attribute__((__visibility__("default")))
  1158. #else
  1159. #define HEDLEY_PRIVATE
  1160. #define HEDLEY_PUBLIC
  1161. #endif
  1162. #define HEDLEY_IMPORT extern
  1163. #endif
  1164. #if defined(HEDLEY_NO_THROW)
  1165. #undef HEDLEY_NO_THROW
  1166. #endif
  1167. #if HEDLEY_HAS_ATTRIBUTE(nothrow) || HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || \
  1168. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
  1169. #define HEDLEY_NO_THROW __attribute__((__nothrow__))
  1170. #elif HEDLEY_MSVC_VERSION_CHECK(13, 1, 0) || HEDLEY_ARM_VERSION_CHECK(4, 1, 0)
  1171. #define HEDLEY_NO_THROW __declspec(nothrow)
  1172. #else
  1173. #define HEDLEY_NO_THROW
  1174. #endif
  1175. #if defined(HEDLEY_FALL_THROUGH)
  1176. #undef HEDLEY_FALL_THROUGH
  1177. #endif
  1178. #if defined(__cplusplus) && \
  1179. (!defined(HEDLEY_SUNPRO_VERSION) || \
  1180. HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0)) && \
  1181. !defined(HEDLEY_PGI_VERSION)
  1182. #if (__cplusplus >= 201703L) || \
  1183. ((__cplusplus >= 201103L) && HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough))
  1184. #define HEDLEY_FALL_THROUGH [[fallthrough]]
  1185. #elif (__cplusplus >= 201103L) && HEDLEY_HAS_CPP_ATTRIBUTE(clang::fallthrough)
  1186. #define HEDLEY_FALL_THROUGH [[clang::fallthrough]]
  1187. #elif (__cplusplus >= 201103L) && HEDLEY_GCC_VERSION_CHECK(7, 0, 0)
  1188. #define HEDLEY_FALL_THROUGH [[gnu::fallthrough]]
  1189. #endif
  1190. #endif
  1191. #if !defined(HEDLEY_FALL_THROUGH)
  1192. #if HEDLEY_GNUC_HAS_ATTRIBUTE(fallthrough, 7, 0, 0) && \
  1193. !defined(HEDLEY_PGI_VERSION)
  1194. #define HEDLEY_FALL_THROUGH __attribute__((__fallthrough__))
  1195. #elif defined(__fallthrough) /* SAL */
  1196. #define HEDLEY_FALL_THROUGH __fallthrough
  1197. #else
  1198. #define HEDLEY_FALL_THROUGH
  1199. #endif
  1200. #endif
  1201. #if defined(HEDLEY_RETURNS_NON_NULL)
  1202. #undef HEDLEY_RETURNS_NON_NULL
  1203. #endif
  1204. #if HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || HEDLEY_GCC_VERSION_CHECK(4, 9, 0)
  1205. #define HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__))
  1206. #elif defined(_Ret_notnull_) /* SAL */
  1207. #define HEDLEY_RETURNS_NON_NULL _Ret_notnull_
  1208. #else
  1209. #define HEDLEY_RETURNS_NON_NULL
  1210. #endif
  1211. #if defined(HEDLEY_ARRAY_PARAM)
  1212. #undef HEDLEY_ARRAY_PARAM
  1213. #endif
  1214. #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
  1215. !defined(__STDC_NO_VLA__) && !defined(__cplusplus) && \
  1216. !defined(HEDLEY_PGI_VERSION) && !defined(HEDLEY_TINYC_VERSION)
  1217. #define HEDLEY_ARRAY_PARAM(name) (name)
  1218. #else
  1219. #define HEDLEY_ARRAY_PARAM(name)
  1220. #endif
  1221. #if defined(HEDLEY_IS_CONSTANT)
  1222. #undef HEDLEY_IS_CONSTANT
  1223. #endif
  1224. #if defined(HEDLEY_REQUIRE_CONSTEXPR)
  1225. #undef HEDLEY_REQUIRE_CONSTEXPR
  1226. #endif
  1227. /* Note the double-underscore. For internal use only; no API
  1228. * guarantees! */
  1229. #if defined(HEDLEY__IS_CONSTEXPR)
  1230. #undef HEDLEY__IS_CONSTEXPR
  1231. #endif
  1232. #if HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \
  1233. HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || \
  1234. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  1235. HEDLEY_TINYC_VERSION_CHECK(0, 9, 19) || \
  1236. HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
  1237. HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || \
  1238. HEDLEY_TI_VERSION_CHECK(6, 1, 0) || \
  1239. (HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0) && !defined(__cplusplus)) || \
  1240. HEDLEY_CRAY_VERSION_CHECK(8, 1, 0)
  1241. #define HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr)
  1242. #endif
  1243. #if !defined(__cplusplus)
  1244. #if HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \
  1245. HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || \
  1246. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
  1247. HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || \
  1248. HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) || \
  1249. HEDLEY_ARM_VERSION_CHECK(5, 4, 0) || \
  1250. HEDLEY_TINYC_VERSION_CHECK(0, 9, 24)
  1251. #if defined(__INTPTR_TYPE__)
  1252. #define HEDLEY__IS_CONSTEXPR(expr) \
  1253. __builtin_types_compatible_p( \
  1254. __typeof__((1 ? (void *)((__INTPTR_TYPE__)((expr)*0)) \
  1255. : (int *)0)), \
  1256. int *)
  1257. #else
  1258. #include <stdint.h>
  1259. #define HEDLEY__IS_CONSTEXPR(expr) \
  1260. __builtin_types_compatible_p( \
  1261. __typeof__((1 ? (void *)((intptr_t)((expr)*0)) : (int *)0)), \
  1262. int *)
  1263. #endif
  1264. #elif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \
  1265. !defined(HEDLEY_SUNPRO_VERSION) && !defined(HEDLEY_PGI_VERSION)) || \
  1266. HEDLEY_HAS_EXTENSION(c_generic_selections) || \
  1267. HEDLEY_GCC_VERSION_CHECK(4, 9, 0) || \
  1268. HEDLEY_INTEL_VERSION_CHECK(17, 0, 0) || \
  1269. HEDLEY_IBM_VERSION_CHECK(12, 1, 0) || \
  1270. HEDLEY_ARM_VERSION_CHECK(5, 3, 0)
  1271. #if defined(__INTPTR_TYPE__)
  1272. #define HEDLEY__IS_CONSTEXPR(expr) \
  1273. _Generic((1 ? (void *)((__INTPTR_TYPE__)((expr)*0)) : (int *)0), \
  1274. int * : 1, void * : 0)
  1275. #else
  1276. #include <stdint.h>
  1277. #define HEDLEY__IS_CONSTEXPR(expr) \
  1278. _Generic((1 ? (void *)((intptr_t)*0) : (int *)0), int * : 1, void * : 0)
  1279. #endif
  1280. #elif defined(HEDLEY_GCC_VERSION) || defined(HEDLEY_INTEL_VERSION) || \
  1281. defined(HEDLEY_TINYC_VERSION) || defined(HEDLEY_TI_VERSION) || \
  1282. defined(__clang__)
  1283. #define HEDLEY__IS_CONSTEXPR(expr) \
  1284. (sizeof(void) != sizeof(*(1 ? ((void *)((expr)*0L)) : ((struct { \
  1285. char v[sizeof(void) * 2]; \
  1286. } *)1))))
  1287. #endif
  1288. #endif
  1289. #if defined(HEDLEY__IS_CONSTEXPR)
  1290. #if !defined(HEDLEY_IS_CONSTANT)
  1291. #define HEDLEY_IS_CONSTANT(expr) HEDLEY__IS_CONSTEXPR(expr)
  1292. #endif
  1293. #define HEDLEY_REQUIRE_CONSTEXPR(expr) \
  1294. (HEDLEY__IS_CONSTEXPR(expr) ? (expr) : (-1))
  1295. #else
  1296. #if !defined(HEDLEY_IS_CONSTANT)
  1297. #define HEDLEY_IS_CONSTANT(expr) (0)
  1298. #endif
  1299. #define HEDLEY_REQUIRE_CONSTEXPR(expr) (expr)
  1300. #endif
  1301. #if defined(HEDLEY_BEGIN_C_DECLS)
  1302. #undef HEDLEY_BEGIN_C_DECLS
  1303. #endif
  1304. #if defined(HEDLEY_END_C_DECLS)
  1305. #undef HEDLEY_END_C_DECLS
  1306. #endif
  1307. #if defined(HEDLEY_C_DECL)
  1308. #undef HEDLEY_C_DECL
  1309. #endif
  1310. #if defined(__cplusplus)
  1311. #define HEDLEY_BEGIN_C_DECLS extern "C" {
  1312. #define HEDLEY_END_C_DECLS }
  1313. #define HEDLEY_C_DECL extern "C"
  1314. #else
  1315. #define HEDLEY_BEGIN_C_DECLS
  1316. #define HEDLEY_END_C_DECLS
  1317. #define HEDLEY_C_DECL
  1318. #endif
  1319. #if defined(HEDLEY_STATIC_ASSERT)
  1320. #undef HEDLEY_STATIC_ASSERT
  1321. #endif
  1322. #if !defined(__cplusplus) && \
  1323. ((defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \
  1324. HEDLEY_HAS_FEATURE(c_static_assert) || \
  1325. HEDLEY_GCC_VERSION_CHECK(6, 0, 0) || \
  1326. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || defined(_Static_assert))
  1327. #define HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message)
  1328. #elif (defined(__cplusplus) && (__cplusplus >= 201103L)) || \
  1329. HEDLEY_MSVC_VERSION_CHECK(16, 0, 0) || \
  1330. (defined(__cplusplus) && HEDLEY_TI_VERSION_CHECK(8, 3, 0))
  1331. #define HEDLEY_STATIC_ASSERT(expr, message) static_assert(expr, message)
  1332. #else
  1333. #define HEDLEY_STATIC_ASSERT(expr, message)
  1334. #endif
  1335. #if defined(HEDLEY_CONST_CAST)
  1336. #undef HEDLEY_CONST_CAST
  1337. #endif
  1338. #if defined(__cplusplus)
  1339. #define HEDLEY_CONST_CAST(T, expr) (const_cast<T>(expr))
  1340. #elif HEDLEY_HAS_WARNING("-Wcast-qual") || \
  1341. HEDLEY_GCC_VERSION_CHECK(4, 6, 0) || \
  1342. HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
  1343. #define HEDLEY_CONST_CAST(T, expr) \
  1344. (__extension__({ \
  1345. HEDLEY_DIAGNOSTIC_PUSH \
  1346. HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL((T)(expr)); \
  1347. HEDLEY_DIAGNOSTIC_POP \
  1348. }))
  1349. #else
  1350. #define HEDLEY_CONST_CAST(T, expr) ((T)(expr))
  1351. #endif
  1352. #if defined(HEDLEY_REINTERPRET_CAST)
  1353. #undef HEDLEY_REINTERPRET_CAST
  1354. #endif
  1355. #if defined(__cplusplus)
  1356. #define HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast<T>(expr))
  1357. #else
  1358. #define HEDLEY_REINTERPRET_CAST(T, expr) (*((T *)&(expr)))
  1359. #endif
  1360. #if defined(HEDLEY_STATIC_CAST)
  1361. #undef HEDLEY_STATIC_CAST
  1362. #endif
  1363. #if defined(__cplusplus)
  1364. #define HEDLEY_STATIC_CAST(T, expr) (static_cast<T>(expr))
  1365. #else
  1366. #define HEDLEY_STATIC_CAST(T, expr) ((T)(expr))
  1367. #endif
  1368. #if defined(HEDLEY_CPP_CAST)
  1369. #undef HEDLEY_CPP_CAST
  1370. #endif
  1371. #if defined(__cplusplus)
  1372. #define HEDLEY_CPP_CAST(T, expr) static_cast<T>(expr)
  1373. #else
  1374. #define HEDLEY_CPP_CAST(T, expr) (expr)
  1375. #endif
  1376. #if defined(HEDLEY_MESSAGE)
  1377. #undef HEDLEY_MESSAGE
  1378. #endif
  1379. #if HEDLEY_HAS_WARNING("-Wunknown-pragmas")
  1380. #define HEDLEY_MESSAGE(msg) \
  1381. HEDLEY_DIAGNOSTIC_PUSH \
  1382. HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
  1383. HEDLEY_PRAGMA(message msg) \
  1384. HEDLEY_DIAGNOSTIC_POP
  1385. #elif HEDLEY_GCC_VERSION_CHECK(4, 4, 0) || HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
  1386. #define HEDLEY_MESSAGE(msg) HEDLEY_PRAGMA(message msg)
  1387. #elif HEDLEY_CRAY_VERSION_CHECK(5, 0, 0)
  1388. #define HEDLEY_MESSAGE(msg) HEDLEY_PRAGMA(_CRI message msg)
  1389. #elif HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
  1390. #define HEDLEY_MESSAGE(msg) HEDLEY_PRAGMA(message(msg))
  1391. #elif HEDLEY_PELLES_VERSION_CHECK(2, 0, 0)
  1392. #define HEDLEY_MESSAGE(msg) HEDLEY_PRAGMA(message(msg))
  1393. #else
  1394. #define HEDLEY_MESSAGE(msg)
  1395. #endif
  1396. #if defined(HEDLEY_WARNING)
  1397. #undef HEDLEY_WARNING
  1398. #endif
  1399. #if HEDLEY_HAS_WARNING("-Wunknown-pragmas")
  1400. #define HEDLEY_WARNING(msg) \
  1401. HEDLEY_DIAGNOSTIC_PUSH \
  1402. HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
  1403. HEDLEY_PRAGMA(clang warning msg) \
  1404. HEDLEY_DIAGNOSTIC_POP
  1405. #elif HEDLEY_GCC_VERSION_CHECK(4, 8, 0) || HEDLEY_PGI_VERSION_CHECK(18, 4, 0)
  1406. #define HEDLEY_WARNING(msg) HEDLEY_PRAGMA(GCC warning msg)
  1407. #elif HEDLEY_MSVC_VERSION_CHECK(15, 0, 0)
  1408. #define HEDLEY_WARNING(msg) HEDLEY_PRAGMA(message(msg))
  1409. #else
  1410. #define HEDLEY_WARNING(msg) HEDLEY_MESSAGE(msg)
  1411. #endif
  1412. #if defined(HEDLEY_REQUIRE_MSG)
  1413. #undef HEDLEY_REQUIRE_MSG
  1414. #endif
  1415. #if HEDLEY_HAS_ATTRIBUTE(diagnose_if)
  1416. #if HEDLEY_HAS_WARNING("-Wgcc-compat")
  1417. #define HEDLEY_REQUIRE_MSG(expr, msg) \
  1418. HEDLEY_DIAGNOSTIC_PUSH \
  1419. _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
  1420. __attribute__((__diagnose_if__(!(expr), msg, "error"))) \
  1421. HEDLEY_DIAGNOSTIC_POP
  1422. #else
  1423. #define HEDLEY_REQUIRE_MSG(expr, msg) \
  1424. __attribute__((__diagnose_if__(!(expr), msg, "error")))
  1425. #endif
  1426. #else
  1427. #define HEDLEY_REQUIRE_MSG(expr, msg)
  1428. #endif
  1429. #if defined(HEDLEY_REQUIRE)
  1430. #undef HEDLEY_REQUIRE
  1431. #endif
  1432. #define HEDLEY_REQUIRE(expr) HEDLEY_REQUIRE_MSG(expr, #expr)
  1433. #if defined(HEDLEY_FLAGS)
  1434. #undef HEDLEY_FLAGS
  1435. #endif
  1436. #if HEDLEY_HAS_ATTRIBUTE(flag_enum)
  1437. #define HEDLEY_FLAGS __attribute__((__flag_enum__))
  1438. #endif
  1439. #if defined(HEDLEY_FLAGS_CAST)
  1440. #undef HEDLEY_FLAGS_CAST
  1441. #endif
  1442. #if HEDLEY_INTEL_VERSION_CHECK(19, 0, 0)
  1443. #define HEDLEY_FLAGS_CAST(T, expr) \
  1444. (__extension__({ \
  1445. HEDLEY_DIAGNOSTIC_PUSH \
  1446. _Pragma("warning(disable:188)")((T)(expr)); \
  1447. HEDLEY_DIAGNOSTIC_POP \
  1448. }))
  1449. #else
  1450. #define HEDLEY_FLAGS_CAST(T, expr) HEDLEY_STATIC_CAST(T, expr)
  1451. #endif
  1452. #if defined(HEDLEY_EMPTY_BASES)
  1453. #undef HEDLEY_EMPTY_BASES
  1454. #endif
  1455. #if HEDLEY_MSVC_VERSION_CHECK(19, 0, 23918) && \
  1456. !HEDLEY_MSVC_VERSION_CHECK(20, 0, 0)
  1457. #define HEDLEY_EMPTY_BASES __declspec(empty_bases)
  1458. #else
  1459. #define HEDLEY_EMPTY_BASES
  1460. #endif
  1461. /* Remaining macros are deprecated. */
  1462. #if defined(HEDLEY_GCC_NOT_CLANG_VERSION_CHECK)
  1463. #undef HEDLEY_GCC_NOT_CLANG_VERSION_CHECK
  1464. #endif
  1465. #if defined(__clang__)
  1466. #define HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major, minor, patch) (0)
  1467. #else
  1468. #define HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major, minor, patch) \
  1469. HEDLEY_GCC_VERSION_CHECK(major, minor, patch)
  1470. #endif
  1471. #if defined(HEDLEY_CLANG_HAS_ATTRIBUTE)
  1472. #undef HEDLEY_CLANG_HAS_ATTRIBUTE
  1473. #endif
  1474. #define HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) HEDLEY_HAS_ATTRIBUTE(attribute)
  1475. #if defined(HEDLEY_CLANG_HAS_CPP_ATTRIBUTE)
  1476. #undef HEDLEY_CLANG_HAS_CPP_ATTRIBUTE
  1477. #endif
  1478. #define HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) \
  1479. HEDLEY_HAS_CPP_ATTRIBUTE(attribute)
  1480. #if defined(HEDLEY_CLANG_HAS_BUILTIN)
  1481. #undef HEDLEY_CLANG_HAS_BUILTIN
  1482. #endif
  1483. #define HEDLEY_CLANG_HAS_BUILTIN(builtin) HEDLEY_HAS_BUILTIN(builtin)
  1484. #if defined(HEDLEY_CLANG_HAS_FEATURE)
  1485. #undef HEDLEY_CLANG_HAS_FEATURE
  1486. #endif
  1487. #define HEDLEY_CLANG_HAS_FEATURE(feature) HEDLEY_HAS_FEATURE(feature)
  1488. #if defined(HEDLEY_CLANG_HAS_EXTENSION)
  1489. #undef HEDLEY_CLANG_HAS_EXTENSION
  1490. #endif
  1491. #define HEDLEY_CLANG_HAS_EXTENSION(extension) HEDLEY_HAS_EXTENSION(extension)
  1492. #if defined(HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE)
  1493. #undef HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE
  1494. #endif
  1495. #define HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) \
  1496. HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute)
  1497. #if defined(HEDLEY_CLANG_HAS_WARNING)
  1498. #undef HEDLEY_CLANG_HAS_WARNING
  1499. #endif
  1500. #define HEDLEY_CLANG_HAS_WARNING(warning) HEDLEY_HAS_WARNING(warning)
  1501. #endif /* !defined(HEDLEY_VERSION) || (HEDLEY_VERSION < X) */