On 5/13/16 3:23 PM, tsbockman wrote:
On Friday, 13 May 2016 at 06:05:14 UTC, Andrew Edwards wrote:
Additionally, what's the best way to handle nested #ifdef's? Those
that appear inside structs, functions and the like... I know that
global #ifdef's are turned to version blocks but versions blocks
cannot be used inside classes, stucts, functions, etc.

`static if` and `version()` can be nested, and both work just fine
inside classes, structs, functions, etc.:

module app;

version = withPrint;

struct A {
   version(withPrint) {
     class B {
       static if(size_t.sizeof == 4) {
         static void print() {
           import std.stdio : writeln;
           version(unittest) {
             writeln("Hello, 32-bit world of unit tests!");
           } else {
             writeln("Hello, 32-bit world!");
           }
         }
       } else {
         static void print() {
           import std.stdio : writeln;
           version(unittest) {
             writeln("Hello, presumably 64-bit world of unit tests!");
           } else {
             writeln("Hello, presumably 64-bit world!");
           }
         }
       }
     }
   }
}

void main() {
   A.B.print();
}

Not sure what I was doing wrong earlier. Works perfectly fine now. Glad I asked because I usually just get frustrated and put it aside and usually never return to it. Thanks for the assist.

(Try it on DPaste: https://dpaste.dzfl.pl/0fafe316f739)

Reply via email to