It is common to assign pointers with allocations using an implicit function-return void * conversion, just like malloc()\'s:
void *malloc(size_t size);
int *
I don't think it's possible to do it in a 100% standard-compliant manner, because non-void pointers are not guaranteed to have the strictly same size as a void*.
It's the same reason the standard demands explicitly casting printf("%p") arguments to void*.
Added: On the other hand, some implementations mandate that this work, such as Windows (which happily casts IUnknown** to void**).