#include #include struct foo { int x; }; struct bar { int x; }; struct baz { int x; }; struct any { int x; }; static void take_any(struct any *any) { } int main(int argc, char *argv[]) { /* Otherwise we get unused warnings for these. */ struct foo *foo = NULL; struct bar *bar = NULL; struct baz *baz = NULL; take_any(typesafe_cb_cast3(struct any *, struct foo *, struct bar *, struct baz *, foo)); take_any(typesafe_cb_cast3(struct any *, struct foo *, struct bar *, struct baz *, bar)); take_any(typesafe_cb_cast3(struct any *, struct foo *, struct bar *, struct baz *, baz)); return 0; }