Unconditional compilation?

Simen Kjaeraas simen.kjaras at gmail.com
Sun Mar 9 07:20:03 PDT 2008


On Sun, 09 Mar 2008 14:50:03 +0100, John C <johnch_atms at hotmail.com> wrote:

> Bill Baxter wrote:
>> John C wrote:
>>> Code in version blocks must be syntactically correct even if the  
>>> condition is not met and the code isn't compiled - ie, the compiler  
>>> still parses the code. But this makes writing libraries that compile  
>>> with both D1 and D2 difficult - I want to add features for D2 users  
>>> without having to distribute a separate version of the library.
>>>
>>> version(D_Version2) {
>>>   struct SomeStruct {
>>>
>>>     // D2 copy ctor
>>>     this(this) {}
>>>
>>>   }
>>> }
>>>
>>> D1 chokes on that, which is expected behaviour according to the spec.  
>>> But how do I get the same behaviour as #if and #else - ie, tell the  
>>> compiler to completely ignore anything if some condition is not met?
>>  String mixin.  Not pretty, but it works.
>>  --bb
>
> Feared as much.
>
> I'm wondering what the point is in having a version block's syntax  
> checked when the code it contains isn't compiled.

Simple answer to that is it might get compiled some other time, and  
whoever uses your code at that time would probably not enjoy being bitten  
by such errors.
Say you change some version'd part of your code, and forget to check it  
for bugs (you've compiled it, it works, life's great, but you forgot that  
small version=foo flag).

-- Simen


More information about the Digitalmars-d-learn mailing list