Print this page
8017 Comply with POSIX.1-2008 and C++11 for the definition of NULL

*** 14,29 **** */ #ifndef _SYS_NULL_H #define _SYS_NULL_H #ifndef NULL #if defined(_LP64) #define NULL 0L #else #define NULL 0 ! #endif #endif /* NULL */ #endif /* _SYS_NULL_H */ --- 14,52 ---- */ #ifndef _SYS_NULL_H #define _SYS_NULL_H + #include <sys/feature_tests.h> + #ifndef NULL + /* + * POSIX.1-2008 requires that the NULL macro be cast to type void *. + * Historically, this has not been done, so we only enable this in a + * POSIX.1-2008 compilation environment. + */ + + #if defined(_XPG7) && !defined(__cplusplus) + #define NULL ((void *)0) + #else + + /* + * ISO C++ requires that the NULL macro be defined as a constant integral + * type evaluating to zero until C++11, and an integer or pointer literal + * with value zero from C++11 onwards. + */ + + #if defined(__cplusplus) && __cplusplus >= 201103L + #define NULL nullptr + #else #if defined(_LP64) #define NULL 0L #else #define NULL 0 ! #endif /* _LP64 */ ! #endif /* C++11 */ ! #endif /* _XPG7 */ #endif /* NULL */ #endif /* _SYS_NULL_H */