The point is, unless you are using some macro magic in C, you'll almost always have to make such a compromise to get an abstracted out sort function.
However, that's only true if you let them do their job, ie use link-time optimizations or code inclusion (which is where most of the template performance comes from).
Including the source of qsort() instead of linking against a DLL blob might be enough to make the C code perform as well as the C++ code.
I'll update the gist with clang results as I get them built and tested.
Of course you won't see any performance improvements if you only build your executable with LTO, but still link dynamically or statically against a non-LTO capable libc.
I would be surprised if other high-performance compilers were unable to do so.