Re: Is this a bug or illegal code?

2014-05-29 Thread safety0ff via Digitalmars-d-learn
On Thursday, 29 May 2014 at 15:02:48 UTC, Steven Schveighoffer 
wrote:
Even if that is valid code, you are much better off using enums 
and static if.


enum includeSomeFeature = ...

static if(includeSomeFeature)
{
 ...
}

These work much more like #defines, and can be seen outside the 
module.


-Steve


Thanks, the following works:
mixin("enum hasFoo = true;");
static if(hasFoo)
{
void main(){}   
}


Re: Is this a bug or illegal code?

2014-05-29 Thread Steven Schveighoffer via Digitalmars-d-learn
On Thu, 29 May 2014 10:45:28 -0400, safety0ff   
wrote:



//*** CODE **
mixin("version = foo;");
version(foo)
{
void main(){}   
}
//** END CODE ***
If it's illegal in D, what is the reason & where is documented?

The reason I was considering such a construct is the following:
Some C libraries have an associated "config.h" header that gets  
generated when it is compiled.
I was thinking it may be possible to parse these config.h files at  
compile time (using text import) and convert some of the #define's into  
"version = foo;"


Even if that is valid code, you are much better off using enums and static  
if.


enum includeSomeFeature = ...

static if(includeSomeFeature)
{
 ...
}

These work much more like #defines, and can be seen outside the module.

-Steve