On Thu, May 21, 2009 at 1:50 PM, Andreas Schwab <sch...@linux-m68k.org> wrote: > Ian Lance Taylor <i...@google.com> writes: > >> Consider this C/C++ program: >> >> extern void **f1(); >> void f2(const char *p) { *(const void **)f1() = p; } >> >> If I compile this program with g++ -Wcast-qual, I get this: >> >> foo2.cc:2: warning: cast from type ‘void**’ to type ‘const void**’ casts >> away qualifiers > > In a sense this warning is actually correct: this is storing a const > char * into a void * object, which is where the qualifier is lost. IMHO > having a warning for this questionable operation is a good thing.
I don't think so. extern char **f1(); void f(char *p) { *(const char **)f1() = p; } warns the same. typeof(*(const char **)) should still be const char *. For extern const char **f1(); void f(char *p) { *(char **)f1() = p; } it warns with t.C: In function ‘void f(char*)’: t.C:4: warning: cast from type ‘const char**’ to type ‘char**’ casts away constness which makes sense. Richard.