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.