On Sunday, 7 September 2014 at 21:31:11 UTC, AsmMan wrote:
Thank you too. Btw, why the & operator in this syntax? I used
to think ref keyword sort of C's T** and & operator is
neeeded.. or is it because f can be a function called without
pass any parameter?
In D, the address-of operator has to be used to get a function
pointer or delegate from a function or member function. This is
unlike C and C++, where the function is implicitly convertible to
its function-pointer type.
This difference in rules may be because D has functions that can
be called without parentheses:
---
int foo() { return 42; }
// Note: `bar` is an overload set.
void bar(void function() a) {}
void bar(int a) {}
void main()
{
assert(foo() == 42);
// Nullary functions can also be called without parentheses.
assert(foo == 42);
bar(foo); // If function pointers worked like in C, which
overload should be called?
}
---