[libcxx] r261381 - Add stdbool.h wrapper for libc++

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 19 16:31:00 PST 2016


On Fri, Feb 19, 2016 at 4:16 PM, Eric Fiselier via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> Author: ericwf
> Date: Fri Feb 19 18:16:41 2016
> New Revision: 261381
>
> URL: http://llvm.org/viewvc/llvm-project?rev=261381&view=rev
> Log:
> Add stdbool.h wrapper for libc++
>
> Summary:
> According to the C++ standard <stdbool.h> isn't allowed to define `true` `false` or `bool`. However these macros are sometimes defined by the compilers `stdbool.h`.
>
> Clang defines the macros whenever `__STRICT_ANSI__` isn't defined (ie `-std=gnu++11`).
> New GCC versions define the macros in C++03 mode only, older GCC versions (4.9 and before) always define the macros.
>
> This patch adds a wrapper header for `stdbool.h` that undefs the required macros.
>
> Reviewers: mclow.lists, rsmith, EricWF
>
> Subscribers: cfe-commits
>
> Differential Revision: http://reviews.llvm.org/D16346
>
> Added:
>     libcxx/trunk/include/stdbool.h
>
> Added: libcxx/trunk/include/stdbool.h
> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/stdbool.h?rev=261381&view=auto
> ==============================================================================
> --- libcxx/trunk/include/stdbool.h (added)
> +++ libcxx/trunk/include/stdbool.h Fri Feb 19 18:16:41 2016
> @@ -0,0 +1,39 @@
> +// -*- C++ -*-
> +//===--------------------------- stdbool.h --------------------------------===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is dual licensed under the MIT and the University of Illinois Open
> +// Source Licenses. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +#ifndef _LIBCPP_STDBOOL_H
> +#define _LIBCPP_STDBOOL_H
> +
> +
> +/*
> +    stdbool.h synopsis
> +
> +Macros:
> +
> +    __bool_true_false_are_defined
> +
> +*/
> +
> +#include <__config>
> +
> +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
> +#pragma GCC system_header
> +#endif
> +
> +#include_next <stdbool.h>

Is there any point in the #include_next, even? As an alternative:

#ifdef __cplusplus
#undef __bool_true_false_are_defined
#define __bool_true_false_are_defined 1
#else
#include_next <stdbool.h>
#endif

> +#ifdef __cplusplus
> +#undef bool
> +#undef true
> +#undef false
> +#undef __bool_true_false_are_defined
> +#define __bool_true_false_are_defined 1
> +#endif
> +
> +#endif  // _LIBCPP_STDBOOL_H
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list