Passing a function pointer with different parameters is UB, even if those params are (void *). Use our separate `_cb` functions that will do the correct casting.