It is. The page starts with talk about namespaces and such, so one thinks this will be about some cool new features of C++11, but instead ends with a global #define.
Yes, coding like this is evil and will eat your hamster. For example, trying to have a variable named "platform" will break your code in strange ways. And before you say "but it's C++, it's modern", CppCoreGuidelines explicitly say this is bad and that one should favor #ifdefs. (https://github.com/isocpp/CppCoreGuidelines/blob/master/CppC...)
The title says "C/C++", but the sample code is C++, and I can't find any mention of support for "inline namespace" in C. Are there C compilers that support it as an extension?
I wouldn't call that "C-style code". Namespaces are a C++-specific feature, and inline namespaces were introduced in C++-11. C has never had either feature.
author here. Unlike weak linking, this method works for functions, templated functions and templates.
The design spec can say - only static linking, good inlining during compile-time, no full-program-optimization will be performed. Even if allowed, I'm not sure, if weakly linked functions are being inlined during link-time-optimization step.
Yes! The problem is, alternative implementations are also meta-programming tricks! Template meta-programming techniques like 'C++ Traits' and 'Curiously recurring template pattern'. Both are being used in the performance-critical places by the way (think Eigen library, etc).
Is there some other alternative that allows 'compile-time static overrides' with relatively clean syntax?
18 comments
[ 3.7 ms ] story [ 27.4 ms ] threadI know it says it is a trick, but I'm not sure I completely get it.
Yes, coding like this is evil and will eat your hamster. For example, trying to have a variable named "platform" will break your code in strange ways. And before you say "but it's C++, it's modern", CppCoreGuidelines explicitly say this is bad and that one should favor #ifdefs. (https://github.com/isocpp/CppCoreGuidelines/blob/master/CppC...)
There have to be some kind of "-DPLATFORM=arm" definition, one have to tell to the compiler in some way what hardware we are running on...
Yes - I forgot that there are no namespaces in C. Still, it does works for an approximation of 'C-style code' (no templates, virtual functions, etc).
"This technique is an alternative to weak linking,..."
The design spec can say - only static linking, good inlining during compile-time, no full-program-optimization will be performed. Even if allowed, I'm not sure, if weakly linked functions are being inlined during link-time-optimization step.
Is there some other alternative that allows 'compile-time static overrides' with relatively clean syntax?