On Tuesday, 10 July 2018 at 12:05:11 UTC, kdevel wrote:
On Saturday, 7 July 2018 at 13:12:59 UTC, Alex wrote:
The site you cited for the guard clause above (c2.com)
works at runtime.

?

static if works at compile team and only inserts code into the final code for run-time depending on the condition (which has to be known at compile time). In your case

   void bar (T ...) (T args)
   {
      static if (args.length == 0)
         return;

      writeln (args [0]);
      return bar (args [1 .. $]);
   }

you could also write

      static if (T.length == 0)

so in case T.length == 0 the resulting run-time code would yield

   void bar (T args) // in that case T is nothing
   {
      return;

      writeln (args [0]);
      return bar (args [1 .. $]);
   }

So the only thing you can control with static if statements is "what code to run" depending on the template arguments.

The problem with the error messages you are getting (https://forum.dlang.org/post/yndsroswikghknzlx...@forum.dlang.org) is that the compiler checks during compilation time whether `args[0]` is valid (which in above case it is not). So you can't use args like a "normal array" as you would in control statements during run-time. I don't know what exactly `args` represents in the background.

[...]

Reply via email to