Robert Clipsham wrote:
I recently came across this:

version( BackendFoo ) {}
else version( BackendBar ) {}
else version( BackendCar ) {}
else
{
  pragma( msg, "Warning: backend version undefined" );
  pragma( msg, "Attempting to guess backend" );
  version( Windows )
  {
    version = BackendFoo;
    pragma( msg, "Selected the Foo backend." );
  }
  else version(...)
  { /* You get the idea */ }
}

However, when trying to compile I get the following error:

Error: version BackendFoo defined after use

What is the reasoning behind this? It could be extremely useful to have this functionality. The only reason I can think of for doing this is that this code could be evaluated after modules that depend on the version being defined, causing it not to work. Surely there would be a way around that?

Versions are like in functional programming, they are NOT variables. Once you've tested the existence of a non-existent version identifier, you've implicitly declared it. When there was a discussion about 'version' some time back, I made a proposal which (among other things) would require you to explicitly state that a particular version identifier is set from the command line; that would make this case clearer.

Reply via email to