13#if !defined(HEDLEY_VERSION) || (HEDLEY_VERSION < 14) 
   14#if defined(HEDLEY_VERSION) 
   17#define HEDLEY_VERSION 14 
   19#if defined(HEDLEY_STRINGIFY_EX) 
   20#undef HEDLEY_STRINGIFY_EX 
   22#define HEDLEY_STRINGIFY_EX(x) #x 
   24#if defined(HEDLEY_STRINGIFY) 
   25#undef HEDLEY_STRINGIFY 
   27#define HEDLEY_STRINGIFY(x) HEDLEY_STRINGIFY_EX(x) 
   29#if defined(HEDLEY_CONCAT_EX) 
   30#undef HEDLEY_CONCAT_EX 
   32#define HEDLEY_CONCAT_EX(a, b) a##b 
   34#if defined(HEDLEY_CONCAT) 
   37#define HEDLEY_CONCAT(a, b) HEDLEY_CONCAT_EX(a, b) 
   39#if defined(HEDLEY_CONCAT3_EX) 
   40#undef HEDLEY_CONCAT3_EX 
   42#define HEDLEY_CONCAT3_EX(a, b, c) a##b##c 
   44#if defined(HEDLEY_CONCAT3) 
   47#define HEDLEY_CONCAT3(a, b, c) HEDLEY_CONCAT3_EX(a, b, c) 
   49#if defined(HEDLEY_VERSION_ENCODE) 
   50#undef HEDLEY_VERSION_ENCODE 
   52#define HEDLEY_VERSION_ENCODE(major, minor, revision)                          \ 
   53  (((major) * 1000000) + ((minor) * 1000) + (revision)) 
 
   55#if defined(HEDLEY_VERSION_DECODE_MAJOR) 
   56#undef HEDLEY_VERSION_DECODE_MAJOR 
   58#define HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) 
   60#if defined(HEDLEY_VERSION_DECODE_MINOR) 
   61#undef HEDLEY_VERSION_DECODE_MINOR 
   63#define HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) 
   65#if defined(HEDLEY_VERSION_DECODE_REVISION) 
   66#undef HEDLEY_VERSION_DECODE_REVISION 
   68#define HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) 
   70#if defined(HEDLEY_GNUC_VERSION) 
   71#undef HEDLEY_GNUC_VERSION 
   73#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) 
   74#define HEDLEY_GNUC_VERSION                                                    \ 
   75  HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) 
   76#elif defined(__GNUC__) 
   77#define HEDLEY_GNUC_VERSION HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) 
   80#if defined(HEDLEY_GNUC_VERSION_CHECK) 
   81#undef HEDLEY_GNUC_VERSION_CHECK 
   83#if defined(HEDLEY_GNUC_VERSION) 
   84#define HEDLEY_GNUC_VERSION_CHECK(major, minor, patch)                         \ 
   85  (HEDLEY_GNUC_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
   87#define HEDLEY_GNUC_VERSION_CHECK(major, minor, patch) (0) 
   90#if defined(HEDLEY_MSVC_VERSION) 
   91#undef HEDLEY_MSVC_VERSION 
   93#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) 
   94#define HEDLEY_MSVC_VERSION                                                    \ 
   95  HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000,                              \ 
   96                        (_MSC_FULL_VER % 10000000) / 100000,                   \ 
   97                        (_MSC_FULL_VER % 100000) / 100) 
   98#elif defined(_MSC_FULL_VER) && !defined(__ICL) 
   99#define HEDLEY_MSVC_VERSION                                                    \ 
  100  HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000,                               \ 
  101                        (_MSC_FULL_VER % 1000000) / 10000,                     \ 
  102                        (_MSC_FULL_VER % 10000) / 10) 
  103#elif defined(_MSC_VER) && !defined(__ICL) 
  104#define HEDLEY_MSVC_VERSION                                                    \ 
  105  HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) 
  108#if defined(HEDLEY_MSVC_VERSION_CHECK) 
  109#undef HEDLEY_MSVC_VERSION_CHECK 
  111#if !defined(HEDLEY_MSVC_VERSION) 
  112#define HEDLEY_MSVC_VERSION_CHECK(major, minor, patch) (0) 
  113#elif defined(_MSC_VER) && (_MSC_VER >= 1400) 
  114#define HEDLEY_MSVC_VERSION_CHECK(major, minor, patch)                         \ 
  115  (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) 
  116#elif defined(_MSC_VER) && (_MSC_VER >= 1200) 
  117#define HEDLEY_MSVC_VERSION_CHECK(major, minor, patch)                         \ 
  118  (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) 
  120#define HEDLEY_MSVC_VERSION_CHECK(major, minor, patch)                         \ 
  121  (_MSC_VER >= ((major * 100) + (minor))) 
  124#if defined(HEDLEY_INTEL_VERSION) 
  125#undef HEDLEY_INTEL_VERSION 
  127#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) &&           \ 
  129#define HEDLEY_INTEL_VERSION                                                   \ 
  130  HEDLEY_VERSION_ENCODE(                                                       \ 
  131    __INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) 
  132#elif defined(__INTEL_COMPILER) && !defined(__ICL) 
  133#define HEDLEY_INTEL_VERSION                                                   \ 
  134  HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) 
  137#if defined(HEDLEY_INTEL_VERSION_CHECK) 
  138#undef HEDLEY_INTEL_VERSION_CHECK 
  140#if defined(HEDLEY_INTEL_VERSION) 
  141#define HEDLEY_INTEL_VERSION_CHECK(major, minor, patch)                        \ 
  142  (HEDLEY_INTEL_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  144#define HEDLEY_INTEL_VERSION_CHECK(major, minor, patch) (0) 
  147#if defined(HEDLEY_INTEL_CL_VERSION) 
  148#undef HEDLEY_INTEL_CL_VERSION 
  150#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) &&           \ 
  152#define HEDLEY_INTEL_CL_VERSION                                                \ 
  153  HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) 
  156#if defined(HEDLEY_INTEL_CL_VERSION_CHECK) 
  157#undef HEDLEY_INTEL_CL_VERSION_CHECK 
  159#if defined(HEDLEY_INTEL_CL_VERSION) 
  160#define HEDLEY_INTEL_CL_VERSION_CHECK(major, minor, patch)                     \ 
  161  (HEDLEY_INTEL_CL_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  163#define HEDLEY_INTEL_CL_VERSION_CHECK(major, minor, patch) (0) 
  166#if defined(HEDLEY_PGI_VERSION) 
  167#undef HEDLEY_PGI_VERSION 
  169#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) &&          \ 
  170  defined(__PGIC_PATCHLEVEL__) 
  171#define HEDLEY_PGI_VERSION                                                     \ 
  172  HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) 
  175#if defined(HEDLEY_PGI_VERSION_CHECK) 
  176#undef HEDLEY_PGI_VERSION_CHECK 
  178#if defined(HEDLEY_PGI_VERSION) 
  179#define HEDLEY_PGI_VERSION_CHECK(major, minor, patch)                          \ 
  180  (HEDLEY_PGI_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  182#define HEDLEY_PGI_VERSION_CHECK(major, minor, patch) (0) 
  185#if defined(HEDLEY_SUNPRO_VERSION) 
  186#undef HEDLEY_SUNPRO_VERSION 
  188#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) 
  189#define HEDLEY_SUNPRO_VERSION                                                  \ 
  190  HEDLEY_VERSION_ENCODE(                                                       \ 
  191    (((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf),            \ 
  192    (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf),              \ 
  193    (__SUNPRO_C & 0xf) * 10) 
  194#elif defined(__SUNPRO_C) 
  195#define HEDLEY_SUNPRO_VERSION                                                  \ 
  196  HEDLEY_VERSION_ENCODE(                                                       \ 
  197    (__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) 
  198#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) 
  199#define HEDLEY_SUNPRO_VERSION                                                  \ 
  200  HEDLEY_VERSION_ENCODE(                                                       \ 
  201    (((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf),          \ 
  202    (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf),            \ 
  203    (__SUNPRO_CC & 0xf) * 10) 
  204#elif defined(__SUNPRO_CC) 
  205#define HEDLEY_SUNPRO_VERSION                                                  \ 
  206  HEDLEY_VERSION_ENCODE(                                                       \ 
  207    (__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) 
  210#if defined(HEDLEY_SUNPRO_VERSION_CHECK) 
  211#undef HEDLEY_SUNPRO_VERSION_CHECK 
  213#if defined(HEDLEY_SUNPRO_VERSION) 
  214#define HEDLEY_SUNPRO_VERSION_CHECK(major, minor, patch)                       \ 
  215  (HEDLEY_SUNPRO_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  217#define HEDLEY_SUNPRO_VERSION_CHECK(major, minor, patch) (0) 
  220#if defined(HEDLEY_EMSCRIPTEN_VERSION) 
  221#undef HEDLEY_EMSCRIPTEN_VERSION 
  223#if defined(__EMSCRIPTEN__) 
  224#define HEDLEY_EMSCRIPTEN_VERSION                                              \ 
  225  HEDLEY_VERSION_ENCODE(                                                       \ 
  226    __EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) 
  229#if defined(HEDLEY_EMSCRIPTEN_VERSION_CHECK) 
  230#undef HEDLEY_EMSCRIPTEN_VERSION_CHECK 
  232#if defined(HEDLEY_EMSCRIPTEN_VERSION) 
  233#define HEDLEY_EMSCRIPTEN_VERSION_CHECK(major, minor, patch)                   \ 
  234  (HEDLEY_EMSCRIPTEN_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  236#define HEDLEY_EMSCRIPTEN_VERSION_CHECK(major, minor, patch) (0) 
  239#if defined(HEDLEY_ARM_VERSION) 
  240#undef HEDLEY_ARM_VERSION 
  242#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) 
  243#define HEDLEY_ARM_VERSION                                                     \ 
  244  HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000,                       \ 
  245                        (__ARMCOMPILER_VERSION % 1000000) / 10000,             \ 
  246                        (__ARMCOMPILER_VERSION % 10000) / 100) 
  247#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) 
  248#define HEDLEY_ARM_VERSION                                                     \ 
  249  HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000,                             \ 
  250                        (__ARMCC_VERSION % 1000000) / 10000,                   \ 
  251                        (__ARMCC_VERSION % 10000) / 100) 
  254#if defined(HEDLEY_ARM_VERSION_CHECK) 
  255#undef HEDLEY_ARM_VERSION_CHECK 
  257#if defined(HEDLEY_ARM_VERSION) 
  258#define HEDLEY_ARM_VERSION_CHECK(major, minor, patch)                          \ 
  259  (HEDLEY_ARM_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  261#define HEDLEY_ARM_VERSION_CHECK(major, minor, patch) (0) 
  264#if defined(HEDLEY_IBM_VERSION) 
  265#undef HEDLEY_IBM_VERSION 
  267#if defined(__ibmxl__) 
  268#define HEDLEY_IBM_VERSION                                                     \ 
  269  HEDLEY_VERSION_ENCODE(                                                       \ 
  270    __ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) 
  271#elif defined(__xlC__) && defined(__xlC_ver__) 
  272#define HEDLEY_IBM_VERSION                                                     \ 
  273  HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) 
  274#elif defined(__xlC__) 
  275#define HEDLEY_IBM_VERSION                                                     \ 
  276  HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) 
  279#if defined(HEDLEY_IBM_VERSION_CHECK) 
  280#undef HEDLEY_IBM_VERSION_CHECK 
  282#if defined(HEDLEY_IBM_VERSION) 
  283#define HEDLEY_IBM_VERSION_CHECK(major, minor, patch)                          \ 
  284  (HEDLEY_IBM_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  286#define HEDLEY_IBM_VERSION_CHECK(major, minor, patch) (0) 
  289#if defined(HEDLEY_TI_VERSION) 
  290#undef HEDLEY_TI_VERSION 
  292#if defined(__TI_COMPILER_VERSION__) &&                                        \ 
  293  (defined(__TMS470__) || defined(__TI_ARM__) || defined(__MSP430__) ||        \ 
  294   defined(__TMS320C2000__)) 
  295#if (__TI_COMPILER_VERSION__ >= 16000000) 
  296#define HEDLEY_TI_VERSION                                                      \ 
  297  HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000,                     \ 
  298                        (__TI_COMPILER_VERSION__ % 1000000) / 1000,            \ 
  299                        (__TI_COMPILER_VERSION__ % 1000)) 
  303#if defined(HEDLEY_TI_VERSION_CHECK) 
  304#undef HEDLEY_TI_VERSION_CHECK 
  306#if defined(HEDLEY_TI_VERSION) 
  307#define HEDLEY_TI_VERSION_CHECK(major, minor, patch)                           \ 
  308  (HEDLEY_TI_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  310#define HEDLEY_TI_VERSION_CHECK(major, minor, patch) (0) 
  313#if defined(HEDLEY_TI_CL2000_VERSION) 
  314#undef HEDLEY_TI_CL2000_VERSION 
  316#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) 
  317#define HEDLEY_TI_CL2000_VERSION                                               \ 
  318  HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000,                     \ 
  319                        (__TI_COMPILER_VERSION__ % 1000000) / 1000,            \ 
  320                        (__TI_COMPILER_VERSION__ % 1000)) 
  323#if defined(HEDLEY_TI_CL2000_VERSION_CHECK) 
  324#undef HEDLEY_TI_CL2000_VERSION_CHECK 
  326#if defined(HEDLEY_TI_CL2000_VERSION) 
  327#define HEDLEY_TI_CL2000_VERSION_CHECK(major, minor, patch)                    \ 
  328  (HEDLEY_TI_CL2000_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  330#define HEDLEY_TI_CL2000_VERSION_CHECK(major, minor, patch) (0) 
  333#if defined(HEDLEY_TI_CL430_VERSION) 
  334#undef HEDLEY_TI_CL430_VERSION 
  336#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) 
  337#define HEDLEY_TI_CL430_VERSION                                                \ 
  338  HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000,                     \ 
  339                        (__TI_COMPILER_VERSION__ % 1000000) / 1000,            \ 
  340                        (__TI_COMPILER_VERSION__ % 1000)) 
  343#if defined(HEDLEY_TI_CL430_VERSION_CHECK) 
  344#undef HEDLEY_TI_CL430_VERSION_CHECK 
  346#if defined(HEDLEY_TI_CL430_VERSION) 
  347#define HEDLEY_TI_CL430_VERSION_CHECK(major, minor, patch)                     \ 
  348  (HEDLEY_TI_CL430_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  350#define HEDLEY_TI_CL430_VERSION_CHECK(major, minor, patch) (0) 
  353#if defined(HEDLEY_TI_ARMCL_VERSION) 
  354#undef HEDLEY_TI_ARMCL_VERSION 
  356#if defined(__TI_COMPILER_VERSION__) &&                                        \ 
  357  (defined(__TMS470__) || defined(__TI_ARM__)) 
  358#define HEDLEY_TI_ARMCL_VERSION                                                \ 
  359  HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000,                     \ 
  360                        (__TI_COMPILER_VERSION__ % 1000000) / 1000,            \ 
  361                        (__TI_COMPILER_VERSION__ % 1000)) 
  364#if defined(HEDLEY_TI_ARMCL_VERSION_CHECK) 
  365#undef HEDLEY_TI_ARMCL_VERSION_CHECK 
  367#if defined(HEDLEY_TI_ARMCL_VERSION) 
  368#define HEDLEY_TI_ARMCL_VERSION_CHECK(major, minor, patch)                     \ 
  369  (HEDLEY_TI_ARMCL_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  371#define HEDLEY_TI_ARMCL_VERSION_CHECK(major, minor, patch) (0) 
  374#if defined(HEDLEY_TI_CL6X_VERSION) 
  375#undef HEDLEY_TI_CL6X_VERSION 
  377#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) 
  378#define HEDLEY_TI_CL6X_VERSION                                                 \ 
  379  HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000,                     \ 
  380                        (__TI_COMPILER_VERSION__ % 1000000) / 1000,            \ 
  381                        (__TI_COMPILER_VERSION__ % 1000)) 
  384#if defined(HEDLEY_TI_CL6X_VERSION_CHECK) 
  385#undef HEDLEY_TI_CL6X_VERSION_CHECK 
  387#if defined(HEDLEY_TI_CL6X_VERSION) 
  388#define HEDLEY_TI_CL6X_VERSION_CHECK(major, minor, patch)                      \ 
  389  (HEDLEY_TI_CL6X_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  391#define HEDLEY_TI_CL6X_VERSION_CHECK(major, minor, patch) (0) 
  394#if defined(HEDLEY_TI_CL7X_VERSION) 
  395#undef HEDLEY_TI_CL7X_VERSION 
  397#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) 
  398#define HEDLEY_TI_CL7X_VERSION                                                 \ 
  399  HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000,                     \ 
  400                        (__TI_COMPILER_VERSION__ % 1000000) / 1000,            \ 
  401                        (__TI_COMPILER_VERSION__ % 1000)) 
  404#if defined(HEDLEY_TI_CL7X_VERSION_CHECK) 
  405#undef HEDLEY_TI_CL7X_VERSION_CHECK 
  407#if defined(HEDLEY_TI_CL7X_VERSION) 
  408#define HEDLEY_TI_CL7X_VERSION_CHECK(major, minor, patch)                      \ 
  409  (HEDLEY_TI_CL7X_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  411#define HEDLEY_TI_CL7X_VERSION_CHECK(major, minor, patch) (0) 
  414#if defined(HEDLEY_TI_CLPRU_VERSION) 
  415#undef HEDLEY_TI_CLPRU_VERSION 
  417#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) 
  418#define HEDLEY_TI_CLPRU_VERSION                                                \ 
  419  HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000,                     \ 
  420                        (__TI_COMPILER_VERSION__ % 1000000) / 1000,            \ 
  421                        (__TI_COMPILER_VERSION__ % 1000)) 
  424#if defined(HEDLEY_TI_CLPRU_VERSION_CHECK) 
  425#undef HEDLEY_TI_CLPRU_VERSION_CHECK 
  427#if defined(HEDLEY_TI_CLPRU_VERSION) 
  428#define HEDLEY_TI_CLPRU_VERSION_CHECK(major, minor, patch)                     \ 
  429  (HEDLEY_TI_CLPRU_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  431#define HEDLEY_TI_CLPRU_VERSION_CHECK(major, minor, patch) (0) 
  434#if defined(HEDLEY_CRAY_VERSION) 
  435#undef HEDLEY_CRAY_VERSION 
  438#if defined(_RELEASE_PATCHLEVEL) 
  439#define HEDLEY_CRAY_VERSION                                                    \ 
  440  HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) 
  442#define HEDLEY_CRAY_VERSION                                                    \ 
  443  HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) 
  447#if defined(HEDLEY_CRAY_VERSION_CHECK) 
  448#undef HEDLEY_CRAY_VERSION_CHECK 
  450#if defined(HEDLEY_CRAY_VERSION) 
  451#define HEDLEY_CRAY_VERSION_CHECK(major, minor, patch)                         \ 
  452  (HEDLEY_CRAY_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  454#define HEDLEY_CRAY_VERSION_CHECK(major, minor, patch) (0) 
  457#if defined(HEDLEY_IAR_VERSION) 
  458#undef HEDLEY_IAR_VERSION 
  460#if defined(__IAR_SYSTEMS_ICC__) 
  462#define HEDLEY_IAR_VERSION                                                     \ 
  463  HEDLEY_VERSION_ENCODE(                                                       \ 
  464    (__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) 
  466#define HEDLEY_IAR_VERSION HEDLEY_VERSION_ENCODE(VER / 100, __VER__ % 100, 0) 
  470#if defined(HEDLEY_IAR_VERSION_CHECK) 
  471#undef HEDLEY_IAR_VERSION_CHECK 
  473#if defined(HEDLEY_IAR_VERSION) 
  474#define HEDLEY_IAR_VERSION_CHECK(major, minor, patch)                          \ 
  475  (HEDLEY_IAR_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  477#define HEDLEY_IAR_VERSION_CHECK(major, minor, patch) (0) 
  480#if defined(HEDLEY_TINYC_VERSION) 
  481#undef HEDLEY_TINYC_VERSION 
  483#if defined(__TINYC__) 
  484#define HEDLEY_TINYC_VERSION                                                   \ 
  485  HEDLEY_VERSION_ENCODE(                                                       \ 
  486    __TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) 
  489#if defined(HEDLEY_TINYC_VERSION_CHECK) 
  490#undef HEDLEY_TINYC_VERSION_CHECK 
  492#if defined(HEDLEY_TINYC_VERSION) 
  493#define HEDLEY_TINYC_VERSION_CHECK(major, minor, patch)                        \ 
  494  (HEDLEY_TINYC_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  496#define HEDLEY_TINYC_VERSION_CHECK(major, minor, patch) (0) 
  499#if defined(HEDLEY_DMC_VERSION) 
  500#undef HEDLEY_DMC_VERSION 
  503#define HEDLEY_DMC_VERSION                                                     \ 
  504  HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) 
  507#if defined(HEDLEY_DMC_VERSION_CHECK) 
  508#undef HEDLEY_DMC_VERSION_CHECK 
  510#if defined(HEDLEY_DMC_VERSION) 
  511#define HEDLEY_DMC_VERSION_CHECK(major, minor, patch)                          \ 
  512  (HEDLEY_DMC_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  514#define HEDLEY_DMC_VERSION_CHECK(major, minor, patch) (0) 
  517#if defined(HEDLEY_COMPCERT_VERSION) 
  518#undef HEDLEY_COMPCERT_VERSION 
  520#if defined(__COMPCERT_VERSION__) 
  521#define HEDLEY_COMPCERT_VERSION                                                \ 
  522  HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000,                          \ 
  523                        (__COMPCERT_VERSION__ / 100) % 100,                    \ 
  524                        __COMPCERT_VERSION__ % 100) 
  527#if defined(HEDLEY_COMPCERT_VERSION_CHECK) 
  528#undef HEDLEY_COMPCERT_VERSION_CHECK 
  530#if defined(HEDLEY_COMPCERT_VERSION) 
  531#define HEDLEY_COMPCERT_VERSION_CHECK(major, minor, patch)                     \ 
  532  (HEDLEY_COMPCERT_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  534#define HEDLEY_COMPCERT_VERSION_CHECK(major, minor, patch) (0) 
  537#if defined(HEDLEY_PELLES_VERSION) 
  538#undef HEDLEY_PELLES_VERSION 
  541#define HEDLEY_PELLES_VERSION                                                  \ 
  542  HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) 
  545#if defined(HEDLEY_PELLES_VERSION_CHECK) 
  546#undef HEDLEY_PELLES_VERSION_CHECK 
  548#if defined(HEDLEY_PELLES_VERSION) 
  549#define HEDLEY_PELLES_VERSION_CHECK(major, minor, patch)                       \ 
  550  (HEDLEY_PELLES_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  552#define HEDLEY_PELLES_VERSION_CHECK(major, minor, patch) (0) 
  555#if defined(HEDLEY_GCC_VERSION) 
  556#undef HEDLEY_GCC_VERSION 
  558#if defined(HEDLEY_GNUC_VERSION) && !defined(__clang__) &&                     \ 
  559  !defined(HEDLEY_INTEL_VERSION) && !defined(HEDLEY_PGI_VERSION) &&            \ 
  560  !defined(HEDLEY_ARM_VERSION) && !defined(HEDLEY_TI_VERSION) &&               \ 
  561  !defined(HEDLEY_TI_ARMCL_VERSION) && !defined(HEDLEY_TI_CL430_VERSION) &&    \ 
  562  !defined(HEDLEY_TI_CL2000_VERSION) && !defined(HEDLEY_TI_CL6X_VERSION) &&    \ 
  563  !defined(HEDLEY_TI_CL7X_VERSION) && !defined(HEDLEY_TI_CLPRU_VERSION) &&     \ 
  564  !defined(__COMPCERT__) 
  565#define HEDLEY_GCC_VERSION HEDLEY_GNUC_VERSION 
  568#if defined(HEDLEY_GCC_VERSION_CHECK) 
  569#undef HEDLEY_GCC_VERSION_CHECK 
  571#if defined(HEDLEY_GCC_VERSION) 
  572#define HEDLEY_GCC_VERSION_CHECK(major, minor, patch)                          \ 
  573  (HEDLEY_GCC_VERSION >= HEDLEY_VERSION_ENCODE(major, minor, patch)) 
  575#define HEDLEY_GCC_VERSION_CHECK(major, minor, patch) (0) 
  578#if defined(HEDLEY_HAS_ATTRIBUTE) 
  579#undef HEDLEY_HAS_ATTRIBUTE 
  581#if defined(__has_attribute) 
  582#define HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) 
  584#define HEDLEY_HAS_ATTRIBUTE(attribute) (0) 
  587#if defined(HEDLEY_GNUC_HAS_ATTRIBUTE) 
  588#undef HEDLEY_GNUC_HAS_ATTRIBUTE 
  590#if defined(__has_attribute) 
  591#define HEDLEY_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch)              \ 
  592  __has_attribute(attribute) 
  594#define HEDLEY_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch)              \ 
  595  HEDLEY_GNUC_VERSION_CHECK(major, minor, patch) 
 
  598#if defined(HEDLEY_GCC_HAS_ATTRIBUTE) 
  599#undef HEDLEY_GCC_HAS_ATTRIBUTE 
  601#if defined(__has_attribute) 
  602#define HEDLEY_GCC_HAS_ATTRIBUTE(attribute, major, minor, patch)               \ 
  603  __has_attribute(attribute) 
  605#define HEDLEY_GCC_HAS_ATTRIBUTE(attribute, major, minor, patch)               \ 
  606  HEDLEY_GCC_VERSION_CHECK(major, minor, patch) 
 
  609#if defined(HEDLEY_HAS_CPP_ATTRIBUTE) 
  610#undef HEDLEY_HAS_CPP_ATTRIBUTE 
  612#if defined(__has_cpp_attribute) && defined(__cplusplus) &&                    \ 
  613  (!defined(HEDLEY_SUNPRO_VERSION) || HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0)) 
  614#define HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) 
  616#define HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) 
  619#if defined(HEDLEY_HAS_CPP_ATTRIBUTE_NS) 
  620#undef HEDLEY_HAS_CPP_ATTRIBUTE_NS 
  622#if !defined(__cplusplus) || !defined(__has_cpp_attribute) 
  623#define HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns, attribute) (0) 
  624#elif !defined(HEDLEY_PGI_VERSION) && !defined(HEDLEY_IAR_VERSION) &&          \ 
  625  (!defined(HEDLEY_SUNPRO_VERSION) ||                                          \ 
  626   HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0)) &&                                   \ 
  627  (!defined(HEDLEY_MSVC_VERSION) || HEDLEY_MSVC_VERSION_CHECK(19, 20, 0)) 
  628#define HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns, attribute)                             \ 
  629  HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) 
  631#define HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns, attribute) (0) 
  634#if defined(HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) 
  635#undef HEDLEY_GNUC_HAS_CPP_ATTRIBUTE 
  637#if defined(__has_cpp_attribute) && defined(__cplusplus) 
  638#define HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute, major, minor, patch)          \ 
  639  __has_cpp_attribute(attribute) 
  641#define HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute, major, minor, patch)          \ 
  642  HEDLEY_GNUC_VERSION_CHECK(major, minor, patch) 
 
  645#if defined(HEDLEY_GCC_HAS_CPP_ATTRIBUTE) 
  646#undef HEDLEY_GCC_HAS_CPP_ATTRIBUTE 
  648#if defined(__has_cpp_attribute) && defined(__cplusplus) 
  649#define HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute, major, minor, patch)           \ 
  650  __has_cpp_attribute(attribute) 
  652#define HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute, major, minor, patch)           \ 
  653  HEDLEY_GCC_VERSION_CHECK(major, minor, patch) 
 
  656#if defined(HEDLEY_HAS_BUILTIN) 
  657#undef HEDLEY_HAS_BUILTIN 
  659#if defined(__has_builtin) 
  660#define HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) 
  662#define HEDLEY_HAS_BUILTIN(builtin) (0) 
  665#if defined(HEDLEY_GNUC_HAS_BUILTIN) 
  666#undef HEDLEY_GNUC_HAS_BUILTIN 
  668#if defined(__has_builtin) 
  669#define HEDLEY_GNUC_HAS_BUILTIN(builtin, major, minor, patch)                  \ 
  670  __has_builtin(builtin) 
  672#define HEDLEY_GNUC_HAS_BUILTIN(builtin, major, minor, patch)                  \ 
  673  HEDLEY_GNUC_VERSION_CHECK(major, minor, patch) 
 
  676#if defined(HEDLEY_GCC_HAS_BUILTIN) 
  677#undef HEDLEY_GCC_HAS_BUILTIN 
  679#if defined(__has_builtin) 
  680#define HEDLEY_GCC_HAS_BUILTIN(builtin, major, minor, patch)                   \ 
  681  __has_builtin(builtin) 
  683#define HEDLEY_GCC_HAS_BUILTIN(builtin, major, minor, patch)                   \ 
  684  HEDLEY_GCC_VERSION_CHECK(major, minor, patch) 
 
  687#if defined(HEDLEY_HAS_FEATURE) 
  688#undef HEDLEY_HAS_FEATURE 
  690#if defined(__has_feature) 
  691#define HEDLEY_HAS_FEATURE(feature) __has_feature(feature) 
  693#define HEDLEY_HAS_FEATURE(feature) (0) 
  696#if defined(HEDLEY_GNUC_HAS_FEATURE) 
  697#undef HEDLEY_GNUC_HAS_FEATURE 
  699#if defined(__has_feature) 
  700#define HEDLEY_GNUC_HAS_FEATURE(feature, major, minor, patch)                  \ 
  701  __has_feature(feature) 
  703#define HEDLEY_GNUC_HAS_FEATURE(feature, major, minor, patch)                  \ 
  704  HEDLEY_GNUC_VERSION_CHECK(major, minor, patch) 
 
  707#if defined(HEDLEY_GCC_HAS_FEATURE) 
  708#undef HEDLEY_GCC_HAS_FEATURE 
  710#if defined(__has_feature) 
  711#define HEDLEY_GCC_HAS_FEATURE(feature, major, minor, patch)                   \ 
  712  __has_feature(feature) 
  714#define HEDLEY_GCC_HAS_FEATURE(feature, major, minor, patch)                   \ 
  715  HEDLEY_GCC_VERSION_CHECK(major, minor, patch) 
 
  718#if defined(HEDLEY_HAS_EXTENSION) 
  719#undef HEDLEY_HAS_EXTENSION 
  721#if defined(__has_extension) 
  722#define HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) 
  724#define HEDLEY_HAS_EXTENSION(extension) (0) 
  727#if defined(HEDLEY_GNUC_HAS_EXTENSION) 
  728#undef HEDLEY_GNUC_HAS_EXTENSION 
  730#if defined(__has_extension) 
  731#define HEDLEY_GNUC_HAS_EXTENSION(extension, major, minor, patch)              \ 
  732  __has_extension(extension) 
  734#define HEDLEY_GNUC_HAS_EXTENSION(extension, major, minor, patch)              \ 
  735  HEDLEY_GNUC_VERSION_CHECK(major, minor, patch) 
 
  738#if defined(HEDLEY_GCC_HAS_EXTENSION) 
  739#undef HEDLEY_GCC_HAS_EXTENSION 
  741#if defined(__has_extension) 
  742#define HEDLEY_GCC_HAS_EXTENSION(extension, major, minor, patch)               \ 
  743  __has_extension(extension) 
  745#define HEDLEY_GCC_HAS_EXTENSION(extension, major, minor, patch)               \ 
  746  HEDLEY_GCC_VERSION_CHECK(major, minor, patch) 
 
  749#if defined(HEDLEY_HAS_DECLSPEC_ATTRIBUTE) 
  750#undef HEDLEY_HAS_DECLSPEC_ATTRIBUTE 
  752#if defined(__has_declspec_attribute) 
  753#define HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute)                               \ 
  754  __has_declspec_attribute(attribute) 
  756#define HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) 
  759#if defined(HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) 
  760#undef HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE 
  762#if defined(__has_declspec_attribute) 
  763#define HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute, major, minor, patch)     \ 
  764  __has_declspec_attribute(attribute) 
  766#define HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute, major, minor, patch)     \ 
  767  HEDLEY_GNUC_VERSION_CHECK(major, minor, patch) 
 
  770#if defined(HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) 
  771#undef HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE 
  773#if defined(__has_declspec_attribute) 
  774#define HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute, major, minor, patch)      \ 
  775  __has_declspec_attribute(attribute) 
  777#define HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute, major, minor, patch)      \ 
  778  HEDLEY_GCC_VERSION_CHECK(major, minor, patch) 
 
  781#if defined(HEDLEY_HAS_WARNING) 
  782#undef HEDLEY_HAS_WARNING 
  784#if defined(__has_warning) 
  785#define HEDLEY_HAS_WARNING(warning) __has_warning(warning) 
  787#define HEDLEY_HAS_WARNING(warning) (0) 
  790#if defined(HEDLEY_GNUC_HAS_WARNING) 
  791#undef HEDLEY_GNUC_HAS_WARNING 
  793#if defined(__has_warning) 
  794#define HEDLEY_GNUC_HAS_WARNING(warning, major, minor, patch)                  \ 
  795  __has_warning(warning) 
  797#define HEDLEY_GNUC_HAS_WARNING(warning, major, minor, patch)                  \ 
  798  HEDLEY_GNUC_VERSION_CHECK(major, minor, patch) 
 
  801#if defined(HEDLEY_GCC_HAS_WARNING) 
  802#undef HEDLEY_GCC_HAS_WARNING 
  804#if defined(__has_warning) 
  805#define HEDLEY_GCC_HAS_WARNING(warning, major, minor, patch)                   \ 
  806  __has_warning(warning) 
  808#define HEDLEY_GCC_HAS_WARNING(warning, major, minor, patch)                   \ 
  809  HEDLEY_GCC_VERSION_CHECK(major, minor, patch) 
 
  812#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) ||            \ 
  813  defined(__clang__) || HEDLEY_GCC_VERSION_CHECK(3, 0, 0) ||                   \ 
  814  HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || HEDLEY_IAR_VERSION_CHECK(8, 0, 0) || \ 
  815  HEDLEY_PGI_VERSION_CHECK(18, 4, 0) || HEDLEY_ARM_VERSION_CHECK(4, 1, 0) ||   \ 
  816  HEDLEY_TI_VERSION_CHECK(15, 12, 0) ||                                        \ 
  817  HEDLEY_TI_ARMCL_VERSION_CHECK(4, 7, 0) ||                                    \ 
  818  HEDLEY_TI_CL430_VERSION_CHECK(2, 0, 1) ||                                    \ 
  819  HEDLEY_TI_CL2000_VERSION_CHECK(6, 1, 0) ||                                   \ 
  820  HEDLEY_TI_CL6X_VERSION_CHECK(7, 0, 0) ||                                     \ 
  821  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
  822  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) ||                                    \ 
  823  HEDLEY_CRAY_VERSION_CHECK(5, 0, 0) ||                                        \ 
  824  HEDLEY_TINYC_VERSION_CHECK(0, 9, 17) ||                                      \ 
  825  HEDLEY_SUNPRO_VERSION_CHECK(8, 0, 0) ||                                      \ 
  826  (HEDLEY_IBM_VERSION_CHECK(10, 1, 0) && defined(__C99_PRAGMA_OPERATOR)) 
  827#define HEDLEY_PRAGMA(value) _Pragma(#value) 
  828#elif HEDLEY_MSVC_VERSION_CHECK(15, 0, 0) 
  829#define HEDLEY_PRAGMA(value) __pragma(value) 
  831#define HEDLEY_PRAGMA(value) 
  834#if defined(HEDLEY_DIAGNOSTIC_PUSH) 
  835#undef HEDLEY_DIAGNOSTIC_PUSH 
  837#if defined(HEDLEY_DIAGNOSTIC_POP) 
  838#undef HEDLEY_DIAGNOSTIC_POP 
  840#if defined(__clang__) 
  841#define HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") 
  842#define HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") 
  843#elif HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) 
  844#define HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") 
  845#define HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") 
  846#elif HEDLEY_GCC_VERSION_CHECK(4, 6, 0) 
  847#define HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") 
  848#define HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") 
  849#elif HEDLEY_MSVC_VERSION_CHECK(15, 0, 0) ||                                   \ 
  850  HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) 
  851#define HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) 
  852#define HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) 
  853#elif HEDLEY_ARM_VERSION_CHECK(5, 6, 0) 
  854#define HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") 
  855#define HEDLEY_DIAGNOSTIC_POP _Pragma("pop") 
  856#elif HEDLEY_TI_VERSION_CHECK(15, 12, 0) ||                                    \ 
  857  HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) ||                                    \ 
  858  HEDLEY_TI_CL430_VERSION_CHECK(4, 4, 0) ||                                    \ 
  859  HEDLEY_TI_CL6X_VERSION_CHECK(8, 1, 0) ||                                     \ 
  860  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
  861  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) 
  862#define HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") 
  863#define HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") 
  864#elif HEDLEY_PELLES_VERSION_CHECK(2, 90, 0) 
  865#define HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") 
  866#define HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") 
  868#define HEDLEY_DIAGNOSTIC_PUSH 
  869#define HEDLEY_DIAGNOSTIC_POP 
  874#if defined(HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) 
  875#undef HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ 
  877#if defined(__cplusplus) 
  878#if HEDLEY_HAS_WARNING("-Wc++98-compat") 
  879#if HEDLEY_HAS_WARNING("-Wc++17-extensions") 
  880#if HEDLEY_HAS_WARNING("-Wc++1z-extensions") 
  881#define HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr)                      \ 
  882  HEDLEY_DIAGNOSTIC_PUSH                                                       \ 
  883  _Pragma("clang diagnostic ignored \"-Wc++98-compat\"")                       \ 
  884    _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"")                 \ 
  885      _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"")               \ 
  886        xpr HEDLEY_DIAGNOSTIC_POP 
  888#define HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr)                      \ 
  889  HEDLEY_DIAGNOSTIC_PUSH                                                       \ 
  890  _Pragma("clang diagnostic ignored \"-Wc++98-compat\"")                       \ 
  891    _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"")                 \ 
  892      xpr HEDLEY_DIAGNOSTIC_POP 
  895#define HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr)                      \ 
  896  HEDLEY_DIAGNOSTIC_PUSH                                                       \ 
  897  _Pragma("clang diagnostic ignored \"-Wc++98-compat\"")                       \ 
  898    xpr HEDLEY_DIAGNOSTIC_POP 
  902#if !defined(HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) 
  903#define HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x 
  906#if defined(HEDLEY_CONST_CAST) 
  907#undef HEDLEY_CONST_CAST 
  909#if defined(__cplusplus) 
  910#define HEDLEY_CONST_CAST(T, expr) (const_cast<T>(expr)) 
  911#elif HEDLEY_HAS_WARNING("-Wcast-qual") ||                                     \ 
  912  HEDLEY_GCC_VERSION_CHECK(4, 6, 0) || HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) 
  913#define HEDLEY_CONST_CAST(T, expr)                                             \ 
  915    HEDLEY_DIAGNOSTIC_PUSH                                                     \ 
  916    HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL((T)(expr));                            \ 
  917    HEDLEY_DIAGNOSTIC_POP                                                      \ 
  920#define HEDLEY_CONST_CAST(T, expr) ((T)(expr)) 
  923#if defined(HEDLEY_REINTERPRET_CAST) 
  924#undef HEDLEY_REINTERPRET_CAST 
  926#if defined(__cplusplus) 
  927#define HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast<T>(expr)) 
  929#define HEDLEY_REINTERPRET_CAST(T, expr) ((T)(expr)) 
  932#if defined(HEDLEY_STATIC_CAST) 
  933#undef HEDLEY_STATIC_CAST 
  935#if defined(__cplusplus) 
  936#define HEDLEY_STATIC_CAST(T, expr) (static_cast<T>(expr)) 
  938#define HEDLEY_STATIC_CAST(T, expr) ((T)(expr)) 
  941#if defined(HEDLEY_CPP_CAST) 
  942#undef HEDLEY_CPP_CAST 
  944#if defined(__cplusplus) 
  945#if HEDLEY_HAS_WARNING("-Wold-style-cast") 
  946#define HEDLEY_CPP_CAST(T, expr)                                               \ 
  947  HEDLEY_DIAGNOSTIC_PUSH                                                       \ 
  948  _Pragma("clang diagnostic ignored \"-Wold-style-cast\"")((T)(expr))          \ 
  949    HEDLEY_DIAGNOSTIC_POP 
  950#elif HEDLEY_IAR_VERSION_CHECK(8, 3, 0) 
  951#define HEDLEY_CPP_CAST(T, expr)                                               \ 
  952  HEDLEY_DIAGNOSTIC_PUSH                                                       \ 
  953  _Pragma("diag_suppress=Pe137") HEDLEY_DIAGNOSTIC_POP 
  955#define HEDLEY_CPP_CAST(T, expr) ((T)(expr)) 
  958#define HEDLEY_CPP_CAST(T, expr) (expr) 
  961#if defined(HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) 
  962#undef HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED 
  964#if HEDLEY_HAS_WARNING("-Wdeprecated-declarations") 
  965#define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED                                   \ 
  966  _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") 
  967#elif HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) 
  968#define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED                                   \ 
  969  _Pragma("warning(disable:1478 1786)") 
  970#elif HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) 
  971#define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED                                   \ 
  972  __pragma(warning(disable : 1478 1786)) 
  973#elif HEDLEY_PGI_VERSION_CHECK(20, 7, 0) 
  974#define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED                                   \ 
  975  _Pragma("diag_suppress 1215,1216,1444,1445") 
  976#elif HEDLEY_PGI_VERSION_CHECK(17, 10, 0) 
  977#define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") 
  978#elif HEDLEY_GCC_VERSION_CHECK(4, 3, 0) 
  979#define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED                                   \ 
  980  _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") 
  981#elif HEDLEY_MSVC_VERSION_CHECK(15, 0, 0) 
  982#define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable : 4996)) 
  983#elif HEDLEY_TI_VERSION_CHECK(15, 12, 0) ||                                    \ 
  984  (HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) &&                                   \ 
  985   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
  986  HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) ||                                    \ 
  987  (HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) &&                                  \ 
  988   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
  989  HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) ||                                   \ 
  990  (HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) &&                                   \ 
  991   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
  992  HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) ||                                    \ 
  993  (HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) &&                                    \ 
  994   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
  995  HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) ||                                     \ 
  996  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
  997  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) 
  998#define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") 
  999#elif HEDLEY_SUNPRO_VERSION_CHECK(5, 13, 0) && !defined(__cplusplus) 
 1000#define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED                                   \ 
 1001  _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") 
 1002#elif HEDLEY_SUNPRO_VERSION_CHECK(5, 13, 0) && defined(__cplusplus) 
 1003#define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED                                   \ 
 1004  _Pragma("error_messages(off,symdeprecated,symdeprecated2)") 
 1005#elif HEDLEY_IAR_VERSION_CHECK(8, 0, 0) 
 1006#define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED                                   \ 
 1007  _Pragma("diag_suppress=Pe1444,Pe1215") 
 1008#elif HEDLEY_PELLES_VERSION_CHECK(2, 90, 0) 
 1009#define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") 
 1011#define HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED 
 1014#if defined(HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) 
 1015#undef HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS 
 1017#if HEDLEY_HAS_WARNING("-Wunknown-pragmas") 
 1018#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS                              \ 
 1019  _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") 
 1020#elif HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) 
 1021#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS                              \ 
 1022  _Pragma("warning(disable:161)") 
 1023#elif HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) 
 1024#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS                              \ 
 1025  __pragma(warning(disable : 161)) 
 1026#elif HEDLEY_PGI_VERSION_CHECK(17, 10, 0) 
 1027#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") 
 1028#elif HEDLEY_GCC_VERSION_CHECK(4, 3, 0) 
 1029#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS                              \ 
 1030  _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") 
 1031#elif HEDLEY_MSVC_VERSION_CHECK(15, 0, 0) 
 1032#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS                              \ 
 1033  __pragma(warning(disable : 4068)) 
 1034#elif HEDLEY_TI_VERSION_CHECK(16, 9, 0) ||                                     \ 
 1035  HEDLEY_TI_CL6X_VERSION_CHECK(8, 0, 0) ||                                     \ 
 1036  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
 1037  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 3, 0) 
 1038#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") 
 1039#elif HEDLEY_TI_CL6X_VERSION_CHECK(8, 0, 0) 
 1040#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") 
 1041#elif HEDLEY_IAR_VERSION_CHECK(8, 0, 0) 
 1042#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") 
 1044#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS 
 1047#if defined(HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) 
 1048#undef HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES 
 1050#if HEDLEY_HAS_WARNING("-Wunknown-attributes") 
 1051#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES                       \ 
 1052  _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") 
 1053#elif HEDLEY_GCC_VERSION_CHECK(4, 6, 0) 
 1054#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES                       \ 
 1055  _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") 
 1056#elif HEDLEY_INTEL_VERSION_CHECK(17, 0, 0) 
 1057#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES                       \ 
 1058  _Pragma("warning(disable:1292)") 
 1059#elif HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) 
 1060#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES                       \ 
 1061  __pragma(warning(disable : 1292)) 
 1062#elif HEDLEY_MSVC_VERSION_CHECK(19, 0, 0) 
 1063#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES                       \ 
 1064  __pragma(warning(disable : 5030)) 
 1065#elif HEDLEY_PGI_VERSION_CHECK(20, 7, 0) 
 1066#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES                       \ 
 1067  _Pragma("diag_suppress 1097,1098") 
 1068#elif HEDLEY_PGI_VERSION_CHECK(17, 10, 0) 
 1069#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES                       \ 
 1070  _Pragma("diag_suppress 1097") 
 1071#elif HEDLEY_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus) 
 1072#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES                       \ 
 1073  _Pragma("error_messages(off,attrskipunsup)") 
 1074#elif HEDLEY_TI_VERSION_CHECK(18, 1, 0) ||                                     \ 
 1075  HEDLEY_TI_CL6X_VERSION_CHECK(8, 3, 0) ||                                     \ 
 1076  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) 
 1077#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES                       \ 
 1078  _Pragma("diag_suppress 1173") 
 1079#elif HEDLEY_IAR_VERSION_CHECK(8, 0, 0) 
 1080#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES                       \ 
 1081  _Pragma("diag_suppress=Pe1097") 
 1083#define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES 
 1086#if defined(HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) 
 1087#undef HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL 
 1089#if HEDLEY_HAS_WARNING("-Wcast-qual") 
 1090#define HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL                                    \ 
 1091  _Pragma("clang diagnostic ignored \"-Wcast-qual\"") 
 1092#elif HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) 
 1093#define HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL                                    \ 
 1094  _Pragma("warning(disable:2203 2331)") 
 1095#elif HEDLEY_GCC_VERSION_CHECK(3, 0, 0) 
 1096#define HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL                                    \ 
 1097  _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") 
 1099#define HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL 
 1102#if defined(HEDLEY_DEPRECATED) 
 1103#undef HEDLEY_DEPRECATED 
 1105#if defined(HEDLEY_DEPRECATED_FOR) 
 1106#undef HEDLEY_DEPRECATED_FOR 
 1108#if HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) ||                                     \ 
 1109  HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) 
 1110#define HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " #since)) 
 1111#define HEDLEY_DEPRECATED_FOR(since, replacement)                              \ 
 1112  __declspec(deprecated("Since " #since "; use " #replacement)) 
 1113#elif HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) ||               \ 
 1114  HEDLEY_GCC_VERSION_CHECK(4, 5, 0) || HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \ 
 1115  HEDLEY_ARM_VERSION_CHECK(5, 6, 0) ||                                         \ 
 1116  HEDLEY_SUNPRO_VERSION_CHECK(5, 13, 0) ||                                     \ 
 1117  HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || HEDLEY_TI_VERSION_CHECK(18, 1, 0) ||  \ 
 1118  HEDLEY_TI_ARMCL_VERSION_CHECK(18, 1, 0) ||                                   \ 
 1119  HEDLEY_TI_CL6X_VERSION_CHECK(8, 3, 0) ||                                     \ 
 1120  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
 1121  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 3, 0) 
 1122#define HEDLEY_DEPRECATED(since)                                               \ 
 1123  __attribute__((__deprecated__("Since " #since))) 
 1124#define HEDLEY_DEPRECATED_FOR(since, replacement)                              \ 
 1125  __attribute__((__deprecated__("Since " #since "; use " #replacement))) 
 1126#elif defined(__cplusplus) && (__cplusplus >= 201402L) 
 1127#define HEDLEY_DEPRECATED(since)                                               \ 
 1128  HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since"            \ 
 1130#define HEDLEY_DEPRECATED_FOR(since, replacement)                              \ 
 1131  HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(                                \ 
 1132    [[deprecated("Since " #since "; use " #replacement)]]) 
 1133#elif HEDLEY_HAS_ATTRIBUTE(deprecated) || HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || \ 
 1134  HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || HEDLEY_TI_VERSION_CHECK(15, 12, 0) ||   \ 
 1135  (HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) &&                                   \ 
 1136   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1137  HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) ||                                    \ 
 1138  (HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) &&                                  \ 
 1139   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1140  HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) ||                                   \ 
 1141  (HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) &&                                   \ 
 1142   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1143  HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) ||                                    \ 
 1144  (HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) &&                                    \ 
 1145   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1146  HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) ||                                     \ 
 1147  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
 1148  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) 
 1149#define HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) 
 1150#define HEDLEY_DEPRECATED_FOR(since, replacement)                              \ 
 1151  __attribute__((__deprecated__)) 
 1152#elif HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) ||                                  \ 
 1153  HEDLEY_PELLES_VERSION_CHECK(6, 50, 0) ||                                     \ 
 1154  HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) 
 1155#define HEDLEY_DEPRECATED(since) __declspec(deprecated) 
 1156#define HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) 
 1157#elif HEDLEY_IAR_VERSION_CHECK(8, 0, 0) 
 1158#define HEDLEY_DEPRECATED(since) _Pragma("deprecated") 
 1159#define HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") 
 1161#define HEDLEY_DEPRECATED(since) 
 1162#define HEDLEY_DEPRECATED_FOR(since, replacement) 
 1165#if defined(HEDLEY_UNAVAILABLE) 
 1166#undef HEDLEY_UNAVAILABLE 
 1168#if HEDLEY_HAS_ATTRIBUTE(warning) || HEDLEY_GCC_VERSION_CHECK(4, 3, 0) ||      \ 
 1169  HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) 
 1170#define HEDLEY_UNAVAILABLE(available_since)                                    \ 
 1171  __attribute__((__warning__("Not available until " #available_since))) 
 1173#define HEDLEY_UNAVAILABLE(available_since) 
 1176#if defined(HEDLEY_WARN_UNUSED_RESULT) 
 1177#undef HEDLEY_WARN_UNUSED_RESULT 
 1179#if defined(HEDLEY_WARN_UNUSED_RESULT_MSG) 
 1180#undef HEDLEY_WARN_UNUSED_RESULT_MSG 
 1182#if HEDLEY_HAS_ATTRIBUTE(warn_unused_result) ||                                \ 
 1183  HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \ 
 1184  HEDLEY_TI_VERSION_CHECK(15, 12, 0) ||                                        \ 
 1185  (HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) &&                                   \ 
 1186   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1187  HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) ||                                    \ 
 1188  (HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) &&                                  \ 
 1189   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1190  HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) ||                                   \ 
 1191  (HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) &&                                   \ 
 1192   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1193  HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) ||                                    \ 
 1194  (HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) &&                                    \ 
 1195   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1196  HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) ||                                     \ 
 1197  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
 1198  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) ||                                    \ 
 1199  (HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0) && defined(__cplusplus)) ||           \ 
 1200  HEDLEY_PGI_VERSION_CHECK(17, 10, 0) 
 1201#define HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) 
 1202#define HEDLEY_WARN_UNUSED_RESULT_MSG(msg)                                     \ 
 1203  __attribute__((__warn_unused_result__)) 
 1204#elif (HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) 
 1205#define HEDLEY_WARN_UNUSED_RESULT                                              \ 
 1206  HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) 
 1207#define HEDLEY_WARN_UNUSED_RESULT_MSG(msg)                                     \ 
 1208  HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) 
 1209#elif HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) 
 1210#define HEDLEY_WARN_UNUSED_RESULT                                              \ 
 1211  HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) 
 1212#define HEDLEY_WARN_UNUSED_RESULT_MSG(msg)                                     \ 
 1213  HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) 
 1214#elif defined(_Check_return_)  
 1215#define HEDLEY_WARN_UNUSED_RESULT _Check_return_ 
 1216#define HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ 
 1218#define HEDLEY_WARN_UNUSED_RESULT 
 1219#define HEDLEY_WARN_UNUSED_RESULT_MSG(msg) 
 1222#if defined(HEDLEY_SENTINEL) 
 1223#undef HEDLEY_SENTINEL 
 1225#if HEDLEY_HAS_ATTRIBUTE(sentinel) || HEDLEY_GCC_VERSION_CHECK(4, 0, 0) ||     \ 
 1226  HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || HEDLEY_ARM_VERSION_CHECK(5, 4, 0) 
 1227#define HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) 
 1229#define HEDLEY_SENTINEL(position) 
 1232#if defined(HEDLEY_NO_RETURN) 
 1233#undef HEDLEY_NO_RETURN 
 1235#if HEDLEY_IAR_VERSION_CHECK(8, 0, 0) 
 1236#define HEDLEY_NO_RETURN __noreturn 
 1237#elif HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) 
 1238#define HEDLEY_NO_RETURN __attribute__((__noreturn__)) 
 1239#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L 
 1240#define HEDLEY_NO_RETURN _Noreturn 
 1241#elif defined(__cplusplus) && (__cplusplus >= 201103L) 
 1242#define HEDLEY_NO_RETURN                                                       \ 
 1243  HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) 
 1244#elif HEDLEY_HAS_ATTRIBUTE(noreturn) || HEDLEY_GCC_VERSION_CHECK(3, 2, 0) ||   \ 
 1245  HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) ||                                     \ 
 1246  HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || HEDLEY_IBM_VERSION_CHECK(10, 1, 0) ||   \ 
 1247  HEDLEY_TI_VERSION_CHECK(15, 12, 0) ||                                        \ 
 1248  (HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) &&                                   \ 
 1249   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1250  HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) ||                                    \ 
 1251  (HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) &&                                  \ 
 1252   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1253  HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) ||                                   \ 
 1254  (HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) &&                                   \ 
 1255   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1256  HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) ||                                    \ 
 1257  (HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) &&                                    \ 
 1258   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1259  HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) ||                                     \ 
 1260  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
 1261  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) 
 1262#define HEDLEY_NO_RETURN __attribute__((__noreturn__)) 
 1263#elif HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0) 
 1264#define HEDLEY_NO_RETURN _Pragma("does_not_return") 
 1265#elif HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) ||                                  \ 
 1266  HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) 
 1267#define HEDLEY_NO_RETURN __declspec(noreturn) 
 1268#elif HEDLEY_TI_CL6X_VERSION_CHECK(6, 0, 0) && defined(__cplusplus) 
 1269#define HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") 
 1270#elif HEDLEY_COMPCERT_VERSION_CHECK(3, 2, 0) 
 1271#define HEDLEY_NO_RETURN __attribute((noreturn)) 
 1272#elif HEDLEY_PELLES_VERSION_CHECK(9, 0, 0) 
 1273#define HEDLEY_NO_RETURN __declspec(noreturn) 
 1275#define HEDLEY_NO_RETURN 
 1278#if defined(HEDLEY_NO_ESCAPE) 
 1279#undef HEDLEY_NO_ESCAPE 
 1281#if HEDLEY_HAS_ATTRIBUTE(noescape) 
 1282#define HEDLEY_NO_ESCAPE __attribute__((__noescape__)) 
 1284#define HEDLEY_NO_ESCAPE 
 1287#if defined(HEDLEY_UNREACHABLE) 
 1288#undef HEDLEY_UNREACHABLE 
 1290#if defined(HEDLEY_UNREACHABLE_RETURN) 
 1291#undef HEDLEY_UNREACHABLE_RETURN 
 1293#if defined(HEDLEY_ASSUME) 
 1296#if HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) ||                                    \ 
 1297  HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) ||                                      \ 
 1298  HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) 
 1299#define HEDLEY_ASSUME(expr) __assume(expr) 
 1300#elif HEDLEY_HAS_BUILTIN(__builtin_assume) 
 1301#define HEDLEY_ASSUME(expr) __builtin_assume(expr) 
 1302#elif HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) ||                               \ 
 1303  HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0) 
 1304#if defined(__cplusplus) 
 1305#define HEDLEY_ASSUME(expr) std::_nassert(expr) 
 1307#define HEDLEY_ASSUME(expr) _nassert(expr) 
 1310#if (HEDLEY_HAS_BUILTIN(__builtin_unreachable) &&                              \ 
 1311     (!defined(HEDLEY_ARM_VERSION))) ||                                        \ 
 1312  HEDLEY_GCC_VERSION_CHECK(4, 5, 0) || HEDLEY_PGI_VERSION_CHECK(18, 10, 0) ||  \ 
 1313  HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || HEDLEY_IBM_VERSION_CHECK(13, 1, 5) 
 1314#define HEDLEY_UNREACHABLE() __builtin_unreachable() 
 1315#elif defined(HEDLEY_ASSUME) 
 1316#define HEDLEY_UNREACHABLE() HEDLEY_ASSUME(0) 
 1318#if !defined(HEDLEY_ASSUME) 
 1319#if defined(HEDLEY_UNREACHABLE) 
 1320#define HEDLEY_ASSUME(expr)                                                    \ 
 1321  HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (HEDLEY_UNREACHABLE(), 1))) 
 1323#define HEDLEY_ASSUME(expr) HEDLEY_STATIC_CAST(void, expr) 
 1326#if defined(HEDLEY_UNREACHABLE) 
 1327#if HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) ||                                 \ 
 1328  HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0) 
 1329#define HEDLEY_UNREACHABLE_RETURN(value)                                       \ 
 1330  return (HEDLEY_STATIC_CAST(void, HEDLEY_ASSUME(0)), (value)) 
 1332#define HEDLEY_UNREACHABLE_RETURN(value) HEDLEY_UNREACHABLE() 
 1335#define HEDLEY_UNREACHABLE_RETURN(value) return (value) 
 1337#if !defined(HEDLEY_UNREACHABLE) 
 1338#define HEDLEY_UNREACHABLE() HEDLEY_ASSUME(0) 
 1342#if HEDLEY_HAS_WARNING("-Wpedantic") 
 1343#pragma clang diagnostic ignored "-Wpedantic" 
 1345#if HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) 
 1346#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" 
 1348#if HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros", 4, 0, 0) 
 1349#if defined(__clang__) 
 1350#pragma clang diagnostic ignored "-Wvariadic-macros" 
 1351#elif defined(HEDLEY_GCC_VERSION) 
 1352#pragma GCC diagnostic ignored "-Wvariadic-macros" 
 1355#if defined(HEDLEY_NON_NULL) 
 1356#undef HEDLEY_NON_NULL 
 1358#if HEDLEY_HAS_ATTRIBUTE(nonnull) || HEDLEY_GCC_VERSION_CHECK(3, 3, 0) ||      \ 
 1359  HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || HEDLEY_ARM_VERSION_CHECK(4, 1, 0) 
 1360#define HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) 
 1362#define HEDLEY_NON_NULL(...) 
 1366#if defined(HEDLEY_PRINTF_FORMAT) 
 1367#undef HEDLEY_PRINTF_FORMAT 
 1369#if defined(__MINGW32__) && HEDLEY_GCC_HAS_ATTRIBUTE(format, 4, 4, 0) &&       \ 
 1370  !defined(__USE_MINGW_ANSI_STDIO) 
 1371#define HEDLEY_PRINTF_FORMAT(string_idx, first_to_check)                       \ 
 1372  __attribute__((__format__(ms_printf, string_idx, first_to_check))) 
 1373#elif defined(__MINGW32__) && HEDLEY_GCC_HAS_ATTRIBUTE(format, 4, 4, 0) &&     \ 
 1374  defined(__USE_MINGW_ANSI_STDIO) 
 1375#define HEDLEY_PRINTF_FORMAT(string_idx, first_to_check)                       \ 
 1376  __attribute__((__format__(gnu_printf, string_idx, first_to_check))) 
 1377#elif HEDLEY_HAS_ATTRIBUTE(format) || HEDLEY_GCC_VERSION_CHECK(3, 1, 0) ||     \ 
 1378  HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || HEDLEY_ARM_VERSION_CHECK(5, 6, 0) || \ 
 1379  HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || HEDLEY_TI_VERSION_CHECK(15, 12, 0) ||  \ 
 1380  (HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) &&                                   \ 
 1381   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1382  HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) ||                                    \ 
 1383  (HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) &&                                  \ 
 1384   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1385  HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) ||                                   \ 
 1386  (HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) &&                                   \ 
 1387   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1388  HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) ||                                    \ 
 1389  (HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) &&                                    \ 
 1390   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1391  HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) ||                                     \ 
 1392  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
 1393  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) 
 1394#define HEDLEY_PRINTF_FORMAT(string_idx, first_to_check)                       \ 
 1395  __attribute__((__format__(__printf__, string_idx, first_to_check))) 
 1396#elif HEDLEY_PELLES_VERSION_CHECK(6, 0, 0) 
 1397#define HEDLEY_PRINTF_FORMAT(string_idx, first_to_check)                       \ 
 1398  __declspec(vaformat(printf, string_idx, first_to_check)) 
 1400#define HEDLEY_PRINTF_FORMAT(string_idx, first_to_check) 
 1403#if defined(HEDLEY_CONSTEXPR) 
 1404#undef HEDLEY_CONSTEXPR 
 1406#if defined(__cplusplus) 
 1407#if __cplusplus >= 201103L 
 1408#define HEDLEY_CONSTEXPR HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) 
 1411#if !defined(HEDLEY_CONSTEXPR) 
 1412#define HEDLEY_CONSTEXPR 
 1415#if defined(HEDLEY_PREDICT) 
 1416#undef HEDLEY_PREDICT 
 1418#if defined(HEDLEY_LIKELY) 
 1421#if defined(HEDLEY_UNLIKELY) 
 1422#undef HEDLEY_UNLIKELY 
 1424#if defined(HEDLEY_UNPREDICTABLE) 
 1425#undef HEDLEY_UNPREDICTABLE 
 1427#if HEDLEY_HAS_BUILTIN(__builtin_unpredictable) 
 1428#define HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) 
 1430#if (HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) &&                  \ 
 1431     !defined(HEDLEY_PGI_VERSION)) ||                                          \ 
 1432  HEDLEY_GCC_VERSION_CHECK(9, 0, 0) 
 1433#define HEDLEY_PREDICT(expr, value, probability)                               \ 
 1434  __builtin_expect_with_probability((expr), (value), (probability)) 
 1435#define HEDLEY_PREDICT_TRUE(expr, probability)                                 \ 
 1436  __builtin_expect_with_probability(!!(expr), 1, (probability)) 
 1437#define HEDLEY_PREDICT_FALSE(expr, probability)                                \ 
 1438  __builtin_expect_with_probability(!!(expr), 0, (probability)) 
 1439#define HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) 
 1440#define HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) 
 1441#elif (HEDLEY_HAS_BUILTIN(__builtin_expect) &&                                 \ 
 1442       !defined(HEDLEY_INTEL_CL_VERSION)) ||                                   \ 
 1443  HEDLEY_GCC_VERSION_CHECK(3, 0, 0) || HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \ 
 1444  (HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0) && defined(__cplusplus)) ||           \ 
 1445  HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || HEDLEY_IBM_VERSION_CHECK(10, 1, 0) ||   \ 
 1446  HEDLEY_TI_VERSION_CHECK(15, 12, 0) ||                                        \ 
 1447  HEDLEY_TI_ARMCL_VERSION_CHECK(4, 7, 0) ||                                    \ 
 1448  HEDLEY_TI_CL430_VERSION_CHECK(3, 1, 0) ||                                    \ 
 1449  HEDLEY_TI_CL2000_VERSION_CHECK(6, 1, 0) ||                                   \ 
 1450  HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) ||                                     \ 
 1451  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
 1452  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) ||                                    \ 
 1453  HEDLEY_TINYC_VERSION_CHECK(0, 9, 27) || HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) 
 1454#define HEDLEY_PREDICT(expr, expected, probability)                            \ 
 1455  (((probability) >= 0.9) ? __builtin_expect((expr), (expected))               \ 
 1456                          : (HEDLEY_STATIC_CAST(void, expected), (expr))) 
 1457#define HEDLEY_PREDICT_TRUE(expr, probability)                                 \ 
 1459    double hedley_probability_ = (probability);                                \ 
 1460    ((hedley_probability_ >= 0.9)                                              \ 
 1461       ? __builtin_expect(!!(expr), 1)                                         \ 
 1462       : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0)         \ 
 1465#define HEDLEY_PREDICT_FALSE(expr, probability)                                \ 
 1467    double hedley_probability_ = (probability);                                \ 
 1468    ((hedley_probability_ >= 0.9)                                              \ 
 1469       ? __builtin_expect(!!(expr), 0)                                         \ 
 1470       : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1)         \ 
 1473#define HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) 
 1474#define HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) 
 1476#define HEDLEY_PREDICT(expr, expected, probability)                            \ 
 1477  (HEDLEY_STATIC_CAST(void, expected), (expr)) 
 
 1478#define HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) 
 1479#define HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) 
 1480#define HEDLEY_LIKELY(expr) (!!(expr)) 
 1481#define HEDLEY_UNLIKELY(expr) (!!(expr)) 
 1483#if !defined(HEDLEY_UNPREDICTABLE) 
 1484#define HEDLEY_UNPREDICTABLE(expr) HEDLEY_PREDICT(expr, 1, 0.5) 
 1487#if defined(HEDLEY_MALLOC) 
 1490#if HEDLEY_HAS_ATTRIBUTE(malloc) || HEDLEY_GCC_VERSION_CHECK(3, 1, 0) ||       \ 
 1491  HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) ||                                      \ 
 1492  HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) ||                                     \ 
 1493  HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || HEDLEY_IBM_VERSION_CHECK(12, 1, 0) ||   \ 
 1494  HEDLEY_TI_VERSION_CHECK(15, 12, 0) ||                                        \ 
 1495  (HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) &&                                   \ 
 1496   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1497  HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) ||                                    \ 
 1498  (HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) &&                                  \ 
 1499   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1500  HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) ||                                   \ 
 1501  (HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) &&                                   \ 
 1502   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1503  HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) ||                                    \ 
 1504  (HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) &&                                    \ 
 1505   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1506  HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) ||                                     \ 
 1507  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
 1508  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) 
 1509#define HEDLEY_MALLOC __attribute__((__malloc__)) 
 1510#elif HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0) 
 1511#define HEDLEY_MALLOC _Pragma("returns_new_memory") 
 1512#elif HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) ||                                   \ 
 1513  HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) 
 1514#define HEDLEY_MALLOC __declspec(restrict) 
 1516#define HEDLEY_MALLOC 
 1519#if defined(HEDLEY_PURE) 
 1522#if HEDLEY_HAS_ATTRIBUTE(pure) || HEDLEY_GCC_VERSION_CHECK(2, 96, 0) ||        \ 
 1523  HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) ||                                      \ 
 1524  HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) ||                                     \ 
 1525  HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || HEDLEY_IBM_VERSION_CHECK(10, 1, 0) ||   \ 
 1526  HEDLEY_TI_VERSION_CHECK(15, 12, 0) ||                                        \ 
 1527  (HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) &&                                   \ 
 1528   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1529  HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) ||                                    \ 
 1530  (HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) &&                                  \ 
 1531   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1532  HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) ||                                   \ 
 1533  (HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) &&                                   \ 
 1534   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1535  HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) ||                                    \ 
 1536  (HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) &&                                    \ 
 1537   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1538  HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) ||                                     \ 
 1539  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
 1540  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) ||                                    \ 
 1541  HEDLEY_PGI_VERSION_CHECK(17, 10, 0) 
 1542#define HEDLEY_PURE __attribute__((__pure__)) 
 1543#elif HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0) 
 1544#define HEDLEY_PURE _Pragma("does_not_write_global_data") 
 1545#elif defined(__cplusplus) && (HEDLEY_TI_CL430_VERSION_CHECK(2, 0, 1) ||       \ 
 1546                               HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0) ||        \ 
 1547                               HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0)) 
 1548#define HEDLEY_PURE _Pragma("FUNC_IS_PURE;") 
 1553#if defined(HEDLEY_CONST) 
 1556#if HEDLEY_HAS_ATTRIBUTE(const) || HEDLEY_GCC_VERSION_CHECK(2, 5, 0) ||        \ 
 1557  HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) ||                                      \ 
 1558  HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) ||                                     \ 
 1559  HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || HEDLEY_IBM_VERSION_CHECK(10, 1, 0) ||   \ 
 1560  HEDLEY_TI_VERSION_CHECK(15, 12, 0) ||                                        \ 
 1561  (HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) &&                                   \ 
 1562   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1563  HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) ||                                    \ 
 1564  (HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) &&                                  \ 
 1565   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1566  HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) ||                                   \ 
 1567  (HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) &&                                   \ 
 1568   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1569  HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) ||                                    \ 
 1570  (HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) &&                                    \ 
 1571   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1572  HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) ||                                     \ 
 1573  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
 1574  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) ||                                    \ 
 1575  HEDLEY_PGI_VERSION_CHECK(17, 10, 0) 
 1576#define HEDLEY_CONST __attribute__((__const__)) 
 1577#elif HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0) 
 1578#define HEDLEY_CONST _Pragma("no_side_effect") 
 1580#define HEDLEY_CONST HEDLEY_PURE 
 1583#if defined(HEDLEY_RESTRICT) 
 1584#undef HEDLEY_RESTRICT 
 1586#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) &&              \ 
 1587  !defined(__cplusplus) 
 1588#define HEDLEY_RESTRICT restrict 
 1589#elif HEDLEY_GCC_VERSION_CHECK(3, 1, 0) ||                                     \ 
 1590  HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) ||                                       \ 
 1591  HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) ||                                      \ 
 1592  HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) ||                                 \ 
 1593  HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || HEDLEY_IBM_VERSION_CHECK(10, 1, 0) ||   \ 
 1594  HEDLEY_PGI_VERSION_CHECK(17, 10, 0) ||                                       \ 
 1595  HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) ||                                    \ 
 1596  HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 4) ||                                   \ 
 1597  HEDLEY_TI_CL6X_VERSION_CHECK(8, 1, 0) ||                                     \ 
 1598  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
 1599  (HEDLEY_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus)) ||           \ 
 1600  HEDLEY_IAR_VERSION_CHECK(8, 0, 0) || defined(__clang__) 
 1601#define HEDLEY_RESTRICT __restrict 
 1602#elif HEDLEY_SUNPRO_VERSION_CHECK(5, 3, 0) && !defined(__cplusplus) 
 1603#define HEDLEY_RESTRICT _Restrict 
 1605#define HEDLEY_RESTRICT 
 1608#if defined(HEDLEY_INLINE) 
 1611#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) ||            \ 
 1612  (defined(__cplusplus) && (__cplusplus >= 199711L)) 
 1613#define HEDLEY_INLINE inline 
 1614#elif defined(HEDLEY_GCC_VERSION) || HEDLEY_ARM_VERSION_CHECK(6, 2, 0) 
 1615#define HEDLEY_INLINE __inline__ 
 1616#elif HEDLEY_MSVC_VERSION_CHECK(12, 0, 0) ||                                   \ 
 1617  HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) ||                                 \ 
 1618  HEDLEY_ARM_VERSION_CHECK(4, 1, 0) ||                                         \ 
 1619  HEDLEY_TI_ARMCL_VERSION_CHECK(5, 1, 0) ||                                    \ 
 1620  HEDLEY_TI_CL430_VERSION_CHECK(3, 1, 0) ||                                    \ 
 1621  HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) ||                                   \ 
 1622  HEDLEY_TI_CL6X_VERSION_CHECK(8, 0, 0) ||                                     \ 
 1623  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
 1624  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) 
 1625#define HEDLEY_INLINE __inline 
 1627#define HEDLEY_INLINE 
 1630#if defined(HEDLEY_ALWAYS_INLINE) 
 1631#undef HEDLEY_ALWAYS_INLINE 
 1633#if HEDLEY_HAS_ATTRIBUTE(always_inline) ||                                     \ 
 1634  HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \ 
 1635  HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) ||                                     \ 
 1636  HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || HEDLEY_IBM_VERSION_CHECK(10, 1, 0) ||   \ 
 1637  HEDLEY_TI_VERSION_CHECK(15, 12, 0) ||                                        \ 
 1638  (HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) &&                                   \ 
 1639   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1640  HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) ||                                    \ 
 1641  (HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) &&                                  \ 
 1642   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1643  HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) ||                                   \ 
 1644  (HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) &&                                   \ 
 1645   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1646  HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) ||                                    \ 
 1647  (HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) &&                                    \ 
 1648   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1649  HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) ||                                     \ 
 1650  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
 1651  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) 
 1652#define HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) HEDLEY_INLINE 
 1653#elif HEDLEY_MSVC_VERSION_CHECK(12, 0, 0) ||                                   \ 
 1654  HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) 
 1655#define HEDLEY_ALWAYS_INLINE __forceinline 
 1656#elif defined(__cplusplus) && (HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) ||       \ 
 1657                               HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) ||       \ 
 1658                               HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) ||      \ 
 1659                               HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) ||        \ 
 1660                               HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||        \ 
 1661                               HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0)) 
 1662#define HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") 
 1663#elif HEDLEY_IAR_VERSION_CHECK(8, 0, 0) 
 1664#define HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") 
 1666#define HEDLEY_ALWAYS_INLINE HEDLEY_INLINE 
 1669#if defined(HEDLEY_NEVER_INLINE) 
 1670#undef HEDLEY_NEVER_INLINE 
 1672#if HEDLEY_HAS_ATTRIBUTE(noinline) || HEDLEY_GCC_VERSION_CHECK(4, 0, 0) ||     \ 
 1673  HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) ||                                      \ 
 1674  HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) ||                                     \ 
 1675  HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || HEDLEY_IBM_VERSION_CHECK(10, 1, 0) ||   \ 
 1676  HEDLEY_TI_VERSION_CHECK(15, 12, 0) ||                                        \ 
 1677  (HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) &&                                   \ 
 1678   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1679  HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) ||                                    \ 
 1680  (HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) &&                                  \ 
 1681   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1682  HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) ||                                   \ 
 1683  (HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) &&                                   \ 
 1684   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1685  HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) ||                                    \ 
 1686  (HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) &&                                    \ 
 1687   defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||                                   \ 
 1688  HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) ||                                     \ 
 1689  HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) ||                                     \ 
 1690  HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) 
 1691#define HEDLEY_NEVER_INLINE __attribute__((__noinline__)) 
 1692#elif HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) ||                                  \ 
 1693  HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) 
 1694#define HEDLEY_NEVER_INLINE __declspec(noinline) 
 1695#elif HEDLEY_PGI_VERSION_CHECK(10, 2, 0) 
 1696#define HEDLEY_NEVER_INLINE _Pragma("noinline") 
 1697#elif HEDLEY_TI_CL6X_VERSION_CHECK(6, 0, 0) && defined(__cplusplus) 
 1698#define HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") 
 1699#elif HEDLEY_IAR_VERSION_CHECK(8, 0, 0) 
 1700#define HEDLEY_NEVER_INLINE _Pragma("inline=never") 
 1701#elif HEDLEY_COMPCERT_VERSION_CHECK(3, 2, 0) 
 1702#define HEDLEY_NEVER_INLINE __attribute((noinline)) 
 1703#elif HEDLEY_PELLES_VERSION_CHECK(9, 0, 0) 
 1704#define HEDLEY_NEVER_INLINE __declspec(noinline) 
 1706#define HEDLEY_NEVER_INLINE 
 1709#if defined(HEDLEY_PRIVATE) 
 1710#undef HEDLEY_PRIVATE 
 1712#if defined(HEDLEY_PUBLIC) 
 1715#if defined(HEDLEY_IMPORT) 
 1718#if defined(_WIN32) || defined(__CYGWIN__) 
 1719#define HEDLEY_PRIVATE 
 1720#define HEDLEY_PUBLIC __declspec(dllexport) 
 1721#define HEDLEY_IMPORT __declspec(dllimport) 
 1723#if HEDLEY_HAS_ATTRIBUTE(visibility) || HEDLEY_GCC_VERSION_CHECK(3, 3, 0) ||   \ 
 1724  HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) ||                                     \ 
 1725  HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \ 
 1726  HEDLEY_IBM_VERSION_CHECK(13, 1, 0) ||                                        \ 
 1727  (defined(__TI_EABI__) && ((HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) &&          \ 
 1728                             defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) ||         \ 
 1729                            HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0))) 
 1730#define HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) 
 1731#define HEDLEY_PUBLIC __attribute__((__visibility__("default"))) 
 1733#define HEDLEY_PRIVATE 
 1734#define HEDLEY_PUBLIC 
 1736#define HEDLEY_IMPORT extern 
 1739#if defined(HEDLEY_NO_THROW) 
 1740#undef HEDLEY_NO_THROW 
 1742#if HEDLEY_HAS_ATTRIBUTE(nothrow) || HEDLEY_GCC_VERSION_CHECK(3, 3, 0) ||      \ 
 1743  HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) 
 1744#define HEDLEY_NO_THROW __attribute__((__nothrow__)) 
 1745#elif HEDLEY_MSVC_VERSION_CHECK(13, 1, 0) ||                                   \ 
 1746  HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) ||                                 \ 
 1747  HEDLEY_ARM_VERSION_CHECK(4, 1, 0) 
 1748#define HEDLEY_NO_THROW __declspec(nothrow) 
 1750#define HEDLEY_NO_THROW 
 1753#if defined(HEDLEY_FALL_THROUGH) 
 1754#undef HEDLEY_FALL_THROUGH 
 1756#if HEDLEY_HAS_ATTRIBUTE(fallthrough) || HEDLEY_GCC_VERSION_CHECK(7, 0, 0) 
 1757#define HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) 
 1758#elif HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang, fallthrough) 
 1759#define HEDLEY_FALL_THROUGH                                                    \ 
 1760  HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) 
 1761#elif HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) 
 1762#define HEDLEY_FALL_THROUGH                                                    \ 
 1763  HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) 
 1764#elif defined(__fallthrough)  
 1765#define HEDLEY_FALL_THROUGH __fallthrough 
 1767#define HEDLEY_FALL_THROUGH 
 1770#if defined(HEDLEY_RETURNS_NON_NULL) 
 1771#undef HEDLEY_RETURNS_NON_NULL 
 1773#if HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || HEDLEY_GCC_VERSION_CHECK(4, 9, 0) 
 1774#define HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) 
 1775#elif defined(_Ret_notnull_)  
 1776#define HEDLEY_RETURNS_NON_NULL _Ret_notnull_ 
 1778#define HEDLEY_RETURNS_NON_NULL 
 1781#if defined(HEDLEY_ARRAY_PARAM) 
 1782#undef HEDLEY_ARRAY_PARAM 
 1784#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) &&              \ 
 1785  !defined(__STDC_NO_VLA__) && !defined(__cplusplus) &&                        \ 
 1786  !defined(HEDLEY_PGI_VERSION) && !defined(HEDLEY_TINYC_VERSION) 
 1787#define HEDLEY_ARRAY_PARAM(name) (name) 
 1789#define HEDLEY_ARRAY_PARAM(name) 
 1792#if defined(HEDLEY_IS_CONSTANT) 
 1793#undef HEDLEY_IS_CONSTANT 
 1795#if defined(HEDLEY_REQUIRE_CONSTEXPR) 
 1796#undef HEDLEY_REQUIRE_CONSTEXPR 
 1800#if defined(HEDLEY_IS_CONSTEXPR_) 
 1801#undef HEDLEY_IS_CONSTEXPR_ 
 1803#if HEDLEY_HAS_BUILTIN(__builtin_constant_p) ||                                \ 
 1804  HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \ 
 1805  HEDLEY_TINYC_VERSION_CHECK(0, 9, 19) || HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \ 
 1806  HEDLEY_IBM_VERSION_CHECK(13, 1, 0) ||                                        \ 
 1807  HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) ||                                     \ 
 1808  (HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0) && !defined(__cplusplus)) ||          \ 
 1809  HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) 
 1810#define HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) 
 1812#if !defined(__cplusplus) 
 1813#if HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) ||                        \ 
 1814  HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \ 
 1815  HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) ||  \ 
 1816  HEDLEY_ARM_VERSION_CHECK(5, 4, 0) || HEDLEY_TINYC_VERSION_CHECK(0, 9, 24) 
 1817#if defined(__INTPTR_TYPE__) 
 1818#define HEDLEY_IS_CONSTEXPR_(expr)                                             \ 
 1819  __builtin_types_compatible_p(                                                \ 
 1820    __typeof__((1 ? (void*)((__INTPTR_TYPE__)((expr) * 0)) : (int*)0)), int*) 
 1823#define HEDLEY_IS_CONSTEXPR_(expr)                                             \ 
 1824  __builtin_types_compatible_p(                                                \ 
 1825    __typeof__((1 ? (void*)((intptr_t)((expr) * 0)) : (int*)0)), int*) 
 1827#elif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) &&           \ 
 1828       !defined(HEDLEY_SUNPRO_VERSION) && !defined(HEDLEY_PGI_VERSION) &&      \ 
 1829       !defined(HEDLEY_IAR_VERSION)) ||                                        \ 
 1830  HEDLEY_HAS_EXTENSION(c_generic_selections) ||                                \ 
 1831  HEDLEY_GCC_VERSION_CHECK(4, 9, 0) || HEDLEY_INTEL_VERSION_CHECK(17, 0, 0) || \ 
 1832  HEDLEY_IBM_VERSION_CHECK(12, 1, 0) || HEDLEY_ARM_VERSION_CHECK(5, 3, 0) 
 1833#if defined(__INTPTR_TYPE__) 
 1834#define HEDLEY_IS_CONSTEXPR_(expr)                                             \ 
 1835  _Generic((1 ? (void*)((__INTPTR_TYPE__)((expr) * 0)) : (int*)0),             \ 
 1840#define HEDLEY_IS_CONSTEXPR_(expr)                                             \ 
 1841  _Generic((1 ? (void*)((intptr_t)*0) : (int*)0), int*: 1, void*: 0) 
 1843#elif defined(HEDLEY_GCC_VERSION) || defined(HEDLEY_INTEL_VERSION) ||          \ 
 1844  defined(HEDLEY_TINYC_VERSION) || defined(HEDLEY_TI_ARMCL_VERSION) ||         \ 
 1845  HEDLEY_TI_CL430_VERSION_CHECK(18, 12, 0) ||                                  \ 
 1846  defined(HEDLEY_TI_CL2000_VERSION) || defined(HEDLEY_TI_CL6X_VERSION) ||      \ 
 1847  defined(HEDLEY_TI_CL7X_VERSION) || defined(HEDLEY_TI_CLPRU_VERSION) ||       \ 
 1849#define HEDLEY_IS_CONSTEXPR_(expr)                                             \ 
 1850  (sizeof(void) != sizeof(*(1 ? ((void*)((expr) * 0L))                         \ 
 1851                              : ((struct { char v[sizeof(void) * 2]; }*)1)))) 
 1854#if defined(HEDLEY_IS_CONSTEXPR_) 
 1855#if !defined(HEDLEY_IS_CONSTANT) 
 1856#define HEDLEY_IS_CONSTANT(expr) HEDLEY_IS_CONSTEXPR_(expr) 
 1858#define HEDLEY_REQUIRE_CONSTEXPR(expr)                                         \ 
 1859  (HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) 
 1861#if !defined(HEDLEY_IS_CONSTANT) 
 1862#define HEDLEY_IS_CONSTANT(expr) (0) 
 1864#define HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) 
 1867#if defined(HEDLEY_BEGIN_C_DECLS) 
 1868#undef HEDLEY_BEGIN_C_DECLS 
 1870#if defined(HEDLEY_END_C_DECLS) 
 1871#undef HEDLEY_END_C_DECLS 
 1873#if defined(HEDLEY_C_DECL) 
 1876#if defined(__cplusplus) 
 1877#define HEDLEY_BEGIN_C_DECLS                                                   \ 
 1880#define HEDLEY_END_C_DECLS } 
 1881#define HEDLEY_C_DECL extern "C" 
 1883#define HEDLEY_BEGIN_C_DECLS 
 1884#define HEDLEY_END_C_DECLS 
 1885#define HEDLEY_C_DECL 
 1888#if defined(HEDLEY_STATIC_ASSERT) 
 1889#undef HEDLEY_STATIC_ASSERT 
 1891#if !defined(__cplusplus) &&                                                   \ 
 1892  ((defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) ||             \ 
 1893   (HEDLEY_HAS_FEATURE(c_static_assert) &&                                     \ 
 1894    !defined(HEDLEY_INTEL_CL_VERSION)) ||                                      \ 
 1895   HEDLEY_GCC_VERSION_CHECK(6, 0, 0) ||                                        \ 
 1896   HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || defined(_Static_assert)) 
 1897#define HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) 
 1898#elif (defined(__cplusplus) && (__cplusplus >= 201103L)) ||                    \ 
 1899  HEDLEY_MSVC_VERSION_CHECK(16, 0, 0) ||                                       \ 
 1900  HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) 
 1901#define HEDLEY_STATIC_ASSERT(expr, message)                                    \ 
 1902  HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) 
 1904#define HEDLEY_STATIC_ASSERT(expr, message) 
 1907#if defined(HEDLEY_NULL) 
 1910#if defined(__cplusplus) 
 1911#if __cplusplus >= 201103L 
 1912#define HEDLEY_NULL HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) 
 1914#define HEDLEY_NULL NULL 
 1916#define HEDLEY_NULL HEDLEY_STATIC_CAST(void*, 0) 
 1919#define HEDLEY_NULL NULL 
 1921#define HEDLEY_NULL ((void*)0) 
 1924#if defined(HEDLEY_MESSAGE) 
 1925#undef HEDLEY_MESSAGE 
 1927#if HEDLEY_HAS_WARNING("-Wunknown-pragmas") 
 1928#define HEDLEY_MESSAGE(msg)                                                    \ 
 1929  HEDLEY_DIAGNOSTIC_PUSH                                                       \ 
 1930  HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS                                    \ 
 1931  HEDLEY_PRAGMA(message msg)                                                   \ 
 1932  HEDLEY_DIAGNOSTIC_POP 
 1933#elif HEDLEY_GCC_VERSION_CHECK(4, 4, 0) || HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) 
 1934#define HEDLEY_MESSAGE(msg) HEDLEY_PRAGMA(message msg) 
 1935#elif HEDLEY_CRAY_VERSION_CHECK(5, 0, 0) 
 1936#define HEDLEY_MESSAGE(msg) HEDLEY_PRAGMA(_CRI message msg) 
 1937#elif HEDLEY_IAR_VERSION_CHECK(8, 0, 0) 
 1938#define HEDLEY_MESSAGE(msg) HEDLEY_PRAGMA(message(msg)) 
 1939#elif HEDLEY_PELLES_VERSION_CHECK(2, 0, 0) 
 1940#define HEDLEY_MESSAGE(msg) HEDLEY_PRAGMA(message(msg)) 
 1942#define HEDLEY_MESSAGE(msg) 
 1945#if defined(HEDLEY_WARNING) 
 1946#undef HEDLEY_WARNING 
 1948#if HEDLEY_HAS_WARNING("-Wunknown-pragmas") 
 1949#define HEDLEY_WARNING(msg)                                                    \ 
 1950  HEDLEY_DIAGNOSTIC_PUSH                                                       \ 
 1951  HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS                                    \ 
 1952  HEDLEY_PRAGMA(clang warning msg)                                             \ 
 1953  HEDLEY_DIAGNOSTIC_POP 
 1954#elif HEDLEY_GCC_VERSION_CHECK(4, 8, 0) ||                                     \ 
 1955  HEDLEY_PGI_VERSION_CHECK(18, 4, 0) || HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) 
 1956#define HEDLEY_WARNING(msg) HEDLEY_PRAGMA(GCC warning msg) 
 1957#elif HEDLEY_MSVC_VERSION_CHECK(15, 0, 0) ||                                   \ 
 1958  HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) 
 1959#define HEDLEY_WARNING(msg) HEDLEY_PRAGMA(message(msg)) 
 1961#define HEDLEY_WARNING(msg) HEDLEY_MESSAGE(msg) 
 1964#if defined(HEDLEY_REQUIRE) 
 1965#undef HEDLEY_REQUIRE 
 1967#if defined(HEDLEY_REQUIRE_MSG) 
 1968#undef HEDLEY_REQUIRE_MSG 
 1970#if HEDLEY_HAS_ATTRIBUTE(diagnose_if) 
 1971#if HEDLEY_HAS_WARNING("-Wgcc-compat") 
 1972#define HEDLEY_REQUIRE(expr)                                                   \ 
 1973  HEDLEY_DIAGNOSTIC_PUSH                                                       \ 
 1974  _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") __attribute__((         \ 
 1975    diagnose_if(!(expr), #expr, "error"))) HEDLEY_DIAGNOSTIC_POP 
 1976#define HEDLEY_REQUIRE_MSG(expr, msg)                                          \ 
 1977  HEDLEY_DIAGNOSTIC_PUSH                                                       \ 
 1978  _Pragma("clang diagnostic ignored \"-Wgcc-compat\"")                         \ 
 1979    __attribute__((diagnose_if(!(expr), msg, "error"))) HEDLEY_DIAGNOSTIC_POP 
 1981#define HEDLEY_REQUIRE(expr)                                                   \ 
 1982  __attribute__((diagnose_if(!(expr), #expr, "error"))) 
 1983#define HEDLEY_REQUIRE_MSG(expr, msg)                                          \ 
 1984  __attribute__((diagnose_if(!(expr), msg, "error"))) 
 1987#define HEDLEY_REQUIRE(expr) 
 1988#define HEDLEY_REQUIRE_MSG(expr, msg) 
 1991#if defined(HEDLEY_FLAGS) 
 1994#if HEDLEY_HAS_ATTRIBUTE(flag_enum) 
 1995#define HEDLEY_FLAGS __attribute__((__flag_enum__)) 
 2000#if defined(HEDLEY_FLAGS_CAST) 
 2001#undef HEDLEY_FLAGS_CAST 
 2003#if HEDLEY_INTEL_VERSION_CHECK(19, 0, 0) 
 2004#define HEDLEY_FLAGS_CAST(T, expr)                                             \ 
 2006    HEDLEY_DIAGNOSTIC_PUSH                                                     \ 
 2007    _Pragma("warning(disable:188)")((T)(expr));                                \ 
 2008    HEDLEY_DIAGNOSTIC_POP                                                      \ 
 2011#define HEDLEY_FLAGS_CAST(T, expr) HEDLEY_STATIC_CAST(T, expr) 
 2014#if defined(HEDLEY_EMPTY_BASES) 
 2015#undef HEDLEY_EMPTY_BASES 
 2017#if (HEDLEY_MSVC_VERSION_CHECK(19, 0, 23918) &&                                \ 
 2018     !HEDLEY_MSVC_VERSION_CHECK(20, 0, 0)) ||                                  \ 
 2019  HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) 
 2020#define HEDLEY_EMPTY_BASES __declspec(empty_bases) 
 2022#define HEDLEY_EMPTY_BASES 
 2027#if defined(HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) 
 2028#undef HEDLEY_GCC_NOT_CLANG_VERSION_CHECK 
 2030#if defined(__clang__) 
 2031#define HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major, minor, patch) (0) 
 2033#define HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major, minor, patch)                \ 
 2034  HEDLEY_GCC_VERSION_CHECK(major, minor, patch) 
 
 2037#if defined(HEDLEY_CLANG_HAS_ATTRIBUTE) 
 2038#undef HEDLEY_CLANG_HAS_ATTRIBUTE 
 2040#define HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) HEDLEY_HAS_ATTRIBUTE(attribute) 
 2042#if defined(HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) 
 2043#undef HEDLEY_CLANG_HAS_CPP_ATTRIBUTE 
 2045#define HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute)                              \ 
 2046  HEDLEY_HAS_CPP_ATTRIBUTE(attribute) 
 
 2048#if defined(HEDLEY_CLANG_HAS_BUILTIN) 
 2049#undef HEDLEY_CLANG_HAS_BUILTIN 
 2051#define HEDLEY_CLANG_HAS_BUILTIN(builtin) HEDLEY_HAS_BUILTIN(builtin) 
 2053#if defined(HEDLEY_CLANG_HAS_FEATURE) 
 2054#undef HEDLEY_CLANG_HAS_FEATURE 
 2056#define HEDLEY_CLANG_HAS_FEATURE(feature) HEDLEY_HAS_FEATURE(feature) 
 2058#if defined(HEDLEY_CLANG_HAS_EXTENSION) 
 2059#undef HEDLEY_CLANG_HAS_EXTENSION 
 2061#define HEDLEY_CLANG_HAS_EXTENSION(extension) HEDLEY_HAS_EXTENSION(extension) 
 2063#if defined(HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) 
 2064#undef HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE 
 2066#define HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute)                         \ 
 2067  HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) 
 
 2069#if defined(HEDLEY_CLANG_HAS_WARNING) 
 2070#undef HEDLEY_CLANG_HAS_WARNING 
 2072#define HEDLEY_CLANG_HAS_WARNING(warning) HEDLEY_HAS_WARNING(warning) 
#define HEDLEY_DIAGNOSTIC_PUSH
 
#define HEDLEY_DIAGNOSTIC_POP