[cfe-dev] Q. on pointer/integer comparison

Richard Smith richard at metafoo.co.uk
Thu Apr 3 12:03:56 PDT 2014


On Thu, Apr 3, 2014 at 12:00 PM, Robinson, Paul <
Paul_Robinson at playstation.sony.com> wrote:

>  Cool.  Although I have to wonder if there's a consolidated
> 2011-as-amended document,
>
> or do I have to cruise the defects page every time I'm trying to look
> something up?
>

Sorry, there's no such thing for C++11. I'm going to try to maintain such
an amended document for C++14, time permitting.

*From:* metafoo at gmail.com [mailto:metafoo at gmail.com] *On Behalf Of *Richard
> Smith
> *Sent:* Wednesday, April 02, 2014 6:58 PM
> *To:* Robinson, Paul
> *Cc:* cfe-dev at cs.uiuc.edu
> *Subject:* Re: [cfe-dev] Q. on pointer/integer comparison
>
>
>
> On Wed, Apr 2, 2014 at 5:47 PM, Robinson, Paul <
> Paul_Robinson at playstation.sony.com> wrote:
>
> With -std=c++11, clang will complain about the expression in
> bar() but not foo().
>
>     bool foo(int *p) { return (p != 0); }
>     bool bar(int* p) { return (p != (1 - 1)); }
>
> With -std=c++03, clang accepts both.
>
> [expr.const]p3 has a Note that says an integral constant expression
> can be used as a null pointer constant.
> So, I think Clang should accept both even in C++11 mode.
>
> Bug, or my usual confusion about the standard?  (I can see issuing
> a warning, because it would be hard to contrive a real-world case
> where somebody would actually want to do this; but if it conforms,
> Clang should not reject it.)
>
>
>
> This was changed by DR 903:
>
>
>
>   http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#903
>
>
>
> We implement this DR in C++11 onwards, since the C++98 rules are *really*
> broken when combined with C++11's generalized constant expressions. Without
> this change, ridiculous things like
>
>
>
>   struct S { int n; };
>
>   int *p = S().n;
>
>
>
> ... would compile, because S().n is an integral constant expression with
> value 0.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140403/0ba3269d/attachment.html>


More information about the cfe-dev mailing list