#include #include union [[gnu::transparent_union]] un { char *ptr; intptr_t i; }; void call(void (*cb)(union un)) { cb("FOO"); } void cb(char *str) { printf("%s\n", str); } int main(int argc, char *argv[]) { call(cb); return 0; }