Cast-qual warnings: current status

Andrew Talbot Andrew.Talbot at
Sat Dec 16 05:38:13 CST 2006


Apart from any oversights, I have completed my run of cast-qual fixes for
the "dlls" and "dlls/tests" directories.

The one file that most distorts the picture when -Wcast-qual is applied
is "unicode.h", since its wide-string functions are inlined and it is
included quite widely.

I have posted a patch (dated 16 Dec 2006, entitled "include: Cast-qual
warnings fix using const_cast macro") that, if not accepted, you can apply
locally, if you want to build with "-Wcast-qual" to see the extent of the
remaining problem.

For the places where we still must use casts, I propose the introduction of
a macro that takes on the role of the "const_cast" in C++. My attempt at
that is as follows.

#ifdef __cplusplus
#define const_cast(t, e)    const_cast<t>(e)
#define const_cast(t, e)    (t)(ULONG_PTR)(e)

This will make its purpose stand out from those of other casts. So, for
example, the definition of strchrW() would become:

extern inline WCHAR *strchrW( const WCHAR *str, WCHAR ch )
    do { if (*str == ch) return const_cast(WCHAR *, str); } while (*str++);
    return NULL;

The positive point of aiming to add -Wcast-qual universally - I would
argue - is that it lets the compiler watch out for inadvertent
introductions of fresh violations, so I become redundant, and you proper
programmers can concentrate on more interesting things. :)

I invite you, please, to debate the above issues, so we can determine the
way forward concerning this issue. Meanwhile, I shall move on to the
few "programs" and "server" files that generate cast-qual warnings.


-- Andy.

More information about the wine-devel mailing list