On 4/11/15 6:08 AM, matovitch wrote:
Hi,

I just learn about auto ref functions and tried this :

import std.stdio;

auto ref foo(int i, ref float f)
{
          if (i < f)
          {
              return i;
          }
          else
          {
              return f;
          }
}

void main()
{
          int i = 1;
          float f1 = 1.1;
          float f2 = 0.9;
          writeln(foo(i, f1));
          writeln(foo(i, f2));
}

Tricky questions : Does it compiles ? If yes what does it do ?
Then my question : How is this possible ?

D has great compile-time tools to examine what the compiler is doing.

A great feature of D for investigating compiler internals is pragma(msg, ...). This prints at compile time some message (a string) that is based on the state at the time. For example:

void main()
{
         int i = 1;
         float f1 = 1.1;
         float f2 = 0.9;
pragma(msg, typeof(foo(i, f1)).stringof); // prints what type foo returns
         auto x = foo(i, f2);
pragma(msg, typeof(x).stringof); // same thing, but easier to understand.
}

result (prints while compiling):

float
float

-Steve

Reply via email to