"Andrei Alexandrescu" <seewebsiteforem...@erdani.org> wrote in message news:jk0naq$257e$1...@digitalmars.com... > > But why duplicate doItSlowWay(); which may be an arbitrarily long > sequence?
If duplicating that block is a problem, there are other ways to do it. version(ThisOS) { version = FastWayA; } else version(ThatOS) { version = FastWayB; } else version(SomeOS) { version = SlowWay; } else version(OtherOS) { version = SlowWay; } else static assert(0, "OS not implemented"); version(FastWayA) { ... } else version (FastWayB) { ... } else version (SlowWay) { ... } > > This seems to accomplish little more than "well I didn't use else". > > Again: what exactly is wrong with specialization? > The advantage is, that when you write the code, you have _no idea_ what platform/os it might need to run on in the future. You _cannot_ know which version is most appropriate for _all_ new platforms, or even if any of them will work at all. The only time to make this decision is when implementing support for a specific platform, and this pattern forces you to consider each place where platform specific behaviour is required. When doing things like this, 100 false positives are much faster to fix than a single false negative causing wrong code/corruption.