This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [C++ Patch] Define __cplusplus == 201300L for -std=c++1y
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Paolo Carlini <paolo dot carlini at oracle dot com>
- Cc: Jason Merrill <jason at redhat dot com>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, Gabriel Dos Reis <gdr at integrable-solutions dot net>
- Date: Fri, 26 Apr 2013 12:42:27 +0200
- Subject: Re: [C++ Patch] Define __cplusplus == 201300L for -std=c++1y
- References: <51781E19 dot 9030802 at oracle dot com> <51782286 dot 7020303 at redhat dot com> <517A57C8 dot 9070309 at oracle dot com>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Fri, Apr 26, 2013 at 12:32:40PM +0200, Paolo Carlini wrote:
> On 04/24/2013 08:20 PM, Jason Merrill wrote:
> >On 04/24/2013 02:02 PM, Paolo Carlini wrote:
> >>+#if __cplusplus < 201300L
> >
> >Don't test for this value. Use <= 201103L instead.
> >
> >OK with that change.
> Thanks Jason.
>
> Today I'm noticing an issue with the underlying <stdio> from glibc,
> which makes our <cstdio> unusable. It does have:
>
> #if !defined __USE_ISOC11 \
> || (defined __cplusplus && __cplusplus <= 201103L)
> /* Get a newline-terminated string from stdin, removing the newline.
> DO NOT USE THIS FUNCTION!! There is no limit on how much it will read.
>
> The function has been officially removed in ISO C11. This opportunity
> is used to also remove it from the GNU feature list. It is now only
> available when explicitly using an old ISO C, Unix, or POSIX standard.
> GCC defines _GNU_SOURCE when building C++ code and the function is still
> in C++11, so it is also available for C++.
>
> This function is a possible cancellation point and therefore not
> marked with __THROW. */
> extern char *gets (char *__s) __wur __attribute_deprecated__;
>
> I don't think the header should check __cplusplus <= 201103L like
> that. Jakub, Jason, what do you think?
I guess Ulrich added this with the expectation that gets will be also
removed from C++1y. Has there been any discussions regarding that in the WG
already?
Jakub