On Sunday, 21 February 2016 at 00:52:13 UTC, bitwise wrote:
On Saturday, 13 February 2016 at 10:27:59 UTC, Daniel N wrote:
"Abstract
This is the proposed wording for a unified call syntax based on the idea that f(x,y) can invoke a member function, x.f(y), if there are no f(x,y). The inverse transformation, from x.f(y) to f(x,y) is not proposed."

They were considering 6 alternatives and chose the worst...
https://isocpp.org/files/papers/P0251R0.pdf

Am I crazy, or is this paper proposing the exact opposite of what would be needed to do chaning of ranges or extension methods?

I don't get how it would be useful at all to type f(x, y) and have the compiler call x.f(y) for me. Why would I ever not want to just use member invocation syntax?

Because UFCS is not about chaining function calls. It's about being able to call a function without worrying about whether it's a free function or a member function. Without some form of UFCS, it really doesn't work well for generic code to be able to call a function when some types define the function and others work with a free function with the same name, because the syntax to call them is different, meaning that the same code won't work with both types. Regardless of whether UFCS is foo(x, y) or x.foo(y), it allows for a _universal_ way to call a function (hence the name Universal Function Call Syntax). That's the whole point.

Much as many folks love how D's version of UFCS makes it really easy to chain function calls, it's really not the main goal of UFCS. It's just a nice side effect of how we've done it. C++ will still get all of the benefits for generic code the way that they're doing it. So, they'll get the intended benefit of UFCS. They just won't get the side benefits that many folks like about the syntax that D chose.

- Jonathan M Davis

Reply via email to