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 */