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