Earlier quoted context omitted.
But the OP title is misleading, this isn't function overloading at all. It's macro overloading. Subtle but important difference. For example, you can't pass the OP's "add" around as a function pointer. You can't declare its prototype in an outside file (leaving the linker to link it in) without putting its full definition in said outside file. Etc. It also gives, IMO, better error messages than C++. If we take OP's c…
I want to pass a function as a pointer even though it is overloaded. C++ supports that. For instance if we do: int (*p)(int, int) = add; overload resolution kicks in there. I want detailed error messages about overload resolution. Maybe not all the time: give me the executive summary ("no suitable overload of add was found") and the details if I specify some "-Woverload-detailed" option or whatever. That's a quality…
That's his point: C _Generic and C++ are not the same. Which one is better was not his point, just that they're different.