As I see it, the goal of uniform function call syntax, as
described here http://www.drdobbs.com/blogs/cpp/232700394, is to
allow non-intrusively extending the functionality of a type. I
think the current implementation comes short in accomplishing
this goal on two accounts:
1) You can't non-intrusively add static member functions
2) You can't non-intrusively add constructors
So, I'm suggesting these two features to be added to the language:
1. Static method lowering rules
If function calls like the following are encountered...
A) Type.compute(<ARGUMENTS>);
B) Type.compute; // it's a static @property function
...and the compute functions haven't been implemented by Type,
they get lowered into free function calls...
A) compute!(Type)(<ARGUMENTS>);
B) compute!(Type);
2. Constructors as free functions
If a constructor call hasn't been implemented by Type...
auto t = Type(<ARGUMENTS>);
...then it get's lowered into a free function call...
auto t = this!(Type)(<ARGUMENTS>);
(or something like that)