Allow compiler-specific preprocessor operators in wrapped headers
The wrappers can handle a broad variety of compiler-specific predefined macros, but they can't handle predefined operators like the following:
// gcc and clang
#if __has_attribute(x)
#if __has_cpp_attribute(x)
#if __has_builtin(x)
#if __has_include(x)
// clang
#if __has_include_next(x)
#if __has_feature(x)
#if __has_extension(x)
#if __has_warning(x)
#if __has_c_attribute(x)
#if __has_declspec_attribute(x)
#if __is_identifier(x)
The wrappers can implement some of these (like __has_feature()
and __has_attribute()
) to simply return zero. Others like __has_include()
and __is_identifier()
are trickier and should probably be left unimplemented.