Then read the clang builtins, much better. With clang you can do C++ stuff, not only _Generic, but overloadable. Which is useful for arbitrary struct support for this problem. https://clang.llvm.org/docs/AttributeReference.html#overload...
gcc's compile-time expression chooser is also severely limited compared to clang.