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?
}
---

Reply via email to