On Mon, 27 Oct 2014, Martin Uecker wrote:

> 3.9.3(5) ...
> Cv-qualifiers applied to an array type attach to the
> underlying element type, so the notation "cv T," where
> T is an array type, refers to an array whose elements
> are so-qualified. Such array types can be said to be
> more (or less) cv-qualified than other types based on
> the cv-qualification of the underlying element types.

I think that is what's relevant.  (The wording you quote seems to be the 
C++11 (and C++98/C++03) wording; N3797 has "An array type whose elements 
are cv-qualified is also considered to have the same cv-qualifications as 
its elements."; the final C++14 standard doesn't yet seem to be 
available.)

> There is another issue in C which has the same underlying reason
> (brought up by Tim Rentsch in comp.std.c) as shown in the following
> example (this is legal C and compiles without a warning (gcc) but is
> illegal in C++):
> 
> #include <string.h>
> static const int x[5] = { 0 };
> void test(void)
> {
>         memset(&x, 0, sizeof(x));
> }
> 
> I did not try to address this in the patch because it would make legal
> code have a warning, but one could think about it.

That code clearly can't have a pedwarn (as it's valid C, it mustn't have 
an error with -pedantic-errors).  And it would clearly be fine for it to 
be diagnosed with -Wc++-compat.  Warnings (not pedwarns) by default, with 
some option to disable them, could be considered if it's unlikely people 
will intentionally do this in C.

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to