# if __has_extension(is_enum) ~~~~~~~~~~~~~~~^
Это языковое расширение Clang , называемое макросами проверки функции . Они долгое время были для Клана. GCC предоставил их, начиная с GCC 5.0, IIRC.
__has_extension
можно проверить как макрос препроцессора. Итак, сначала вы проверяете наличие макроса, а затем проверяете эту функцию:#if defined(__has_extension) # if __has_extension(is_enum) ... # endif #endif
__has_extension(is_enum)
должен находиться в отдельной строке.Он работает для включения файлов. Из проекта Crypto ++ файл rdrand.cpp :
# include
// rdrand, MSC, ICC, and GCC # if defined(__has_include) # if __has_include( ) # include // rdseed for some compilers, like GCC # endif # endif