On Thu, May 25, 2017 at 04:11:19PM +0200, Jakub Jelinek wrote: > So, what can one do with typeof or similar to avoid the warning? > > void > foo (const void *p) > { > const int *const q = (const int *const) p; > typeof (q) r = (typeof (q)) p; > (void) q; > (void) r; > } > > AFAIK typeof doesn't strip the toplevel qualifiers and I see current trunk > warns even about the cast in r initialization. Similarly to what has been > noted recently in another (C) PR, it would be nice if we had toplevel cv > stripping variant of typeof or some special builtin that could wrap > typeof or some type and could be used in places where typeof can, > __strip_cv (typeof (q)) = (__strip_cv (typeof (q))) p; > or > typeof (q) = (__strip_cv (typeof (q))) p; > or > __strip_cv (const int *const) z; > where the last one would be effectively > const int *z;
I guess in C++ one can use typeof (q) r = (remove_cv <typeof (q)>::type) p; or something similar, but in C there is nothing like that. Jakub