As I heard, It is not safe to convert pointer to function to void*
.
Okay, is it safe to cast
void (*enumerate) (void (*)(const struct foo *event, void *), void *)
to
void (*enumerate) (void (*)(const void *event, void *), void *)
and then call it with
void (*)(const void *, void *)
as first argument, which treats its first void* as struct foo*?