gcc/clang want structs to be defined before used in an argument list