On Friday, 24 July 2015 at 21:29:56 UTC, Jonathan M Davis wrote:
On Friday, 24 July 2015 at 20:46:07 UTC, Tofu Ninja wrote:
Is omitting the () not part of ufcs? Or does it have some other name, I can never remember.

No. That's simply omitting the parens from a function call that has no arguments. If it has a name, it's just "optional parens." Universal Function Call Syntax is the syntax that allows you to call a free function as if it were a member function, which is why stuff like

auto result = myRange.find(bar);

works. It _does_ mean that you can drop even more parens, because the first function argument is now to the left of the dot, and the parens are then empty if there was only one function argument, but being able to drop the parens has nothing to do with UFCS. We could still have UFCS and yet never be able to drop parens.

- Jonathan M Davis

Ok I kinda assumed they were both included in the concept of UFCS, just replace "UFCS" in what I said before with "optional parens". Basicly I was just saying that I suppose optional parens do not really make sense on function pointers. Aka if "a" is a function pointer then auto b = a; should type "b" to a function pointer as well, which is how it currently works, afik.

But the part that I don't think makes sense for

     auto a = {return 4;};

to type "a" to a function pointer. I would expect {return 4;} to be treated as a function(not a function pointer). With it being treated as a function, I would expect it to be called with optional parens and type "a" to an int. I would expect auto

      a = &{return 4;};

to type "a" to a function pointer, which makes much more sense to me. But that's not how function literals work right now. Treating {return 4;} as a function(not a function pointer) makes a lot more sense and allows

     alias a = {return 4;};

to work as well, which is simply a function declaration.

Reply via email to