In some cases, gnulib's <stdalign.h> does not need to include <stddef.h>. In this case, avoid namespace pollution.
2022-09-24 Bruno Haible <br...@clisp.org> stdalign: Avoid namespace pollution. * lib/stdalign.in.h (_GL_STDALIGN_NEEDS_STDDEF): New macro. Include <stddef.h> only when needed. diff --git a/lib/stdalign.in.h b/lib/stdalign.in.h index 3b117df11f..9ba40e2c45 100644 --- a/lib/stdalign.in.h +++ b/lib/stdalign.in.h @@ -42,10 +42,7 @@ '-malign-double' is used. The result cannot be used as a value for an 'enum' constant, if you - want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. - - Include <stddef.h> for offsetof. */ -#include <stddef.h> + want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. */ /* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other standard headers, defines conflicting implementations of _Alignas @@ -66,9 +63,11 @@ # else template <class __t> struct __alignof_helper { char __a; __t __b; }; # define _Alignof(type) offsetof (__alignof_helper<type>, __b) +# define _GL_STDALIGN_NEEDS_STDDEF 1 # endif # else # define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) +# define _GL_STDALIGN_NEEDS_STDDEF 1 # endif #endif #if ! (defined __cplusplus && 201103 <= __cplusplus) @@ -124,4 +123,9 @@ # define __alignas_is_defined 1 #endif +/* Include <stddef.h> if needed for offsetof. */ +#if _GL_STDALIGN_NEEDS_STDDEF +# include <stddef.h> +#endif + #endif /* _GL_STDALIGN_H */