On Thursday, March 08, 2012 06:38:48 Tyler Jameson Little wrote: > I would like to do something like this: > > version (linux || BSD) { > // do something... > } else { > version (Windows) { > // do something else > } else { > // do something else > assert(false, "Unsupported operating system"); > } > } > > The only way I've been able to do this, is by splitting up the > two versions and repeat code. > > Is there a better way to do this? A static if can do this, so is > there a way that I can use a static if somehow?
You can do version(x) {} else version(y) {} else {} but there is no logical and or logical or with versions. It's _only_ checking whether a particular version exists or not. Walter Bright is completely against having anything more complicated with versioning, since he thinks that it just engenders bad code and bugs. Now, you could do version(x) version = xOrY else version(y) version = xOrY version(xOrY) {} and then xOrY will exist for the rest of that module. But that's as close as you're going to ge to logical and or logical or for versions. Of course, if the issue is linux || FreeBSD, you might want to just consider using Posix. Unless you're doing something that is specific to linux and FreeBSD but not Posix in general (which I would expect to be unlikely), Posix will do the trick just fine. - Jonathan M Davis