Next: `__has_include`, Previous: `__has_cpp_attribute`, Up: Conditional Syntax [Contents][Index]

#### 4.2.8 `__has_builtin`

The special operator `__has_builtin (operand)` may be used in constant integer contexts and in preprocessor ‘`#if`’ and ‘`#elif`’ expressions to test whether the symbol named by its operand is recognized as a built-in function by GCC in the current language and conformance mode. It evaluates to a constant integer with a nonzero value if the argument refers to such a function, and to zero otherwise. The operator may also be used in preprocessor ‘`#if`’ and ‘`#elif`’ expressions. The `__has_builtin` operator by itself, without any operand or parentheses, acts as a predefined macro so that support for it can be tested in portable code. Thus, the recommended use of the operator is as follows:

    #if defined __has_builtin
    #  if __has_builtin (__builtin_object_size)
    #    define builtin_object_size(ptr) __builtin_object_size (ptr, 2)
    #  endif
    #endif
    #ifndef builtin_object_size
    #  define builtin_object_size(ptr)   ((size_t)-1)
    #endif