On Sunday, 27 January 2013 at 18:12:48 UTC, Artur Skawina wrote:
struct Plain
{
    int a;
}

struct Tricky
{
    int a;
    Plain opCall() { return Plain.init }
}

void func(int) { }

// What happens?
Tricky t;
t.a.func();

I suppose func is called with Tricky.a, because t is a variable not a function.

But, by the way, what are the exact rules of this thing we call "optional parentheses"? Perhaps this:

"Empty parentheses may be omitted when calling functions with a user-defined name."

That leaves operators, delegates, function pointers, and function objects outside of that rule, because they aren't functions with a name. But, parens could be omitted with functions whose all arguments have default values.

Reply via email to