@nprofile1q... transparent_union was only originally for wait.
Since in c++ you can have overloads based on the argument, you dont need say int* or union wait*, you could just pass union wait* and that would then cast to int* in the overload and pass to the extern"C" function.
The other thing is the c++ front end just never got the support for it because of the overloads could happen. Recently (In the last 20 years), the usage in glibc was removed so the support for transparent_union was much less needed so it just was never added to the c++ frontend.
Note in gcc, the c and c++ front end have different code to function call resolution (and differentparsers); this is different from clang. So in summary it just was not seen as needed and nobody hooked it up.