On 14 March 2014 17:53, Walter Bright <newshou...@digitalmars.com> wrote: > On 3/14/2014 10:26 AM, Johannes Pfau wrote: >> >> I use manifest constants instead of version identifiers as well. If a >> version identifier affects the public API/ABI of a library, then the >> library and all code using the library always have to be compiled with >> the same version switches(inlining and templates make this an even >> bigger problem). This is not only inconvenient, it's also easy to think >> of examples where the problem will only show up as crashes at runtime. >> The only reason why that's not an issue in phobos/druntime is that we >> only use compiler defined versions there, but user defined versions are >> almost unusable. > > > Use this method: > > > -------- > import wackyfunctionality; > ... > WackyFunction(); > -------- > module wackyfunctionality; > > void WackyFunction() { > version (Linux) > SomeWackyFunction(); > else version (OSX) > SomeWackyFunction(); > else > ... workaround ... > } > --------
Some years down the line (and some platform testing) turns into: -------- module wackyfunctionality; void WackyFunction() { version (Linux) { version (ARM) _SomeWackyFunction(); else version (MIPS) MIPS_SomeWackyFunction(); else version (X86) SomeWackyFunction(); else version (X86_64) SomeWackyFunction(); else ... should be some wacky function, but workaround for general case ... } else version (OSX) { version (PPC) iSomeWackyFunction(); else SomeWackyFunction(); // In hope there's no other Apple hardware. } else version (OpenBSD) { /// Blah } else version (Haiku) { /// Blah } else ... workaround ... } --------