For function-multiversioning, the intrinsic headers in both gcc and clang have logic to take care of selecting targets. You also don't need to do dispatch manually when writing manual optimizations--the same function name with different targets is supported and dispatches automatically.

While using C extensions, and yes Microslop rather have you using C++.

https://herbsutter.com/2012/05/03/reader-qa-what-about-vc-an...

Even if in recent years after tbat post they added support for C11 and C17, minus some stuff like aligned mallocs.