#[repr(C)] union Foo { data: *const T } union Bar { data: *const T } #[repr(C)] union Tuple { a: *const T, b: *const E, } type Indirection = Tuple; #[no_mangle] pub extern "C" fn root( a: Foo, b: Foo, c: Bar, d: Foo>, e: Bar>, f: Bar>, g: Tuple, f32>, h: Indirection ) { }