During a recent discussion (see comments to this answer), R.. recommended to never create aliases for pointer-to-const
types as you won\'t be able to deallocat
I don't read the same thing in 6.3.2.3. That paragraph is about conversions that happen implicitly and that don't need a casts. So an implicit conversion from a pointer-to-const
object may be not permitted, but this says nothing about explicit casts.
Casts are handled in 6.5.4, and I don't see anything that would constrain you from a cast of any pointer-to-const
that is by itself not const
qualified with (void*)
. In the contrary it says
Conversions that involve pointers, other than where permitted by the constraints of 6.5.16.1, shall be specified by means of an explicit cast.
So I read there that if you do things explicitly, they are permitted.
So I think the following is completely valid
char const *p = malloc(1);
free((void*)p);
As a side note, for your second line of thoughts, a library that returns a pointer-to-const
qualified object that then is to be placed in the responsibility of the caller, makes not much sense to me. Either
const
to have some weak
protection that the caller doesn't
change it, orconst
pointer, for
his use.