On Tue, May 24, 2005 at 05:03:27PM +0200, Andreas Schwab wrote:
> Paul Koning <[EMAIL PROTECTED]> writes:
> > I hope that doesn't require (void *) casts for pointer arguments
> > passed to the likes of memcpy...
>
> Only the (void*) -> (any*) direction requires a cast in C++, the other
> direction is still converted implicitly.
In my view, the decision by the C standards committees to allow the
omission of the cast in the reverse direction was a bad mistake (and I
wrote my first C program in 1981, if I recall correctly).
While, in
int * int_p = malloc(num_integers * sizeof(int));
the operation is safe, this is only because the void* returned by malloc
is different from the void* obtained by, say,
double d_var;
void * p;
...
p = &d_var;
since one is safe to assign to an int* and the other is not. We really
have two different types here; one represents the top of a lattice and
the other represents the bottom. It would have been nice if there
were a type "aligned_pointer_t" to represent the kind of object returned
by malloc.
For this reason, I always cast the result of malloc to the proper type;
it just feels wrong otherwise.