diff options
Diffstat (limited to 'lib/stdbool.in.h')
| -rw-r--r-- | lib/stdbool.in.h | 56 | 
1 files changed, 33 insertions, 23 deletions
| diff --git a/lib/stdbool.in.h b/lib/stdbool.in.h index f2510a9e..fb1cde05 100644 --- a/lib/stdbool.in.h +++ b/lib/stdbool.in.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2003, 2006-2010 Free Software Foundation, Inc. +/* Copyright (C) 2001-2003, 2006-2015 Free Software Foundation, Inc.     Written by Bruno Haible <haible@clisp.cons.org>, 2001.     This program is free software; you can redistribute it and/or modify @@ -12,8 +12,7 @@     GNU Lesser General Public License for more details.     You should have received a copy of the GNU Lesser General Public License -   along with this program; if not, write to the Free Software Foundation, -   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */ +   along with this program; if not, see <http://www.gnu.org/licenses/>.  */  #ifndef _GL_STDBOOL_H  #define _GL_STDBOOL_H @@ -67,24 +66,19 @@  # undef true  #endif -/* For the sake of symbolic names in gdb, we define true and false as -   enum constants, not only as macros. -   It is tempting to write -      typedef enum { false = 0, true = 1 } _Bool; -   so that gdb prints values of type 'bool' symbolically. But if we do -   this, values of type '_Bool' may promote to 'int' or 'unsigned int' -   (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' -   (see ISO C 99 6.3.1.1.(2)).  So we add a negative value to the -   enum; this ensures that '_Bool' promotes to 'int'.  */ -#if defined __cplusplus || (defined __BEOS__ && !defined __HAIKU__) +#ifdef __cplusplus +# define _Bool bool +# define bool bool +#else +# if defined __BEOS__ && !defined __HAIKU__    /* A compiler known to have 'bool'.  */    /* If the compiler already has both 'bool' and '_Bool', we can assume they       are the same types.  */ -# if !@HAVE__BOOL@ +#  if !@HAVE__BOOL@  typedef bool _Bool; -# endif -#else -# if !defined __GNUC__ +#  endif +# else +#  if !defined __GNUC__     /* If @HAVE__BOOL@:          Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when          the built-in _Bool type is used.  See @@ -104,19 +98,35 @@ typedef bool _Bool;            "Invalid enumerator. (badenum)" with HP-UX cc on Tru64.          The only benefit of the enum, debuggability, is not important          with these compilers.  So use 'signed char' and no enum.  */ -#  define _Bool signed char -# else +#   define _Bool signed char +#  else     /* With this compiler, trust the _Bool type if the compiler has it.  */ -#  if !@HAVE__BOOL@ +#   if !@HAVE__BOOL@ +   /* For the sake of symbolic names in gdb, define true and false as +      enum constants, not only as macros. +      It is tempting to write +         typedef enum { false = 0, true = 1 } _Bool; +      so that gdb prints values of type 'bool' symbolically.  But then +      values of type '_Bool' might promote to 'int' or 'unsigned int' +      (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' +      (see ISO C 99 6.3.1.1.(2)).  So add a negative value to the +      enum; this ensures that '_Bool' promotes to 'int'.  */  typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; +#   endif  #  endif  # endif +# define bool _Bool  #endif -#define bool _Bool  /* The other macros must be usable in preprocessor directives.  */ -#define false 0 -#define true 1 +#ifdef __cplusplus +# define false false +# define true true +#else +# define false 0 +# define true 1 +#endif +  #define __bool_true_false_are_defined 1  #endif /* _GL_STDBOOL_H */ | 
