On Sunday, 31 July 2016 at 07:10:46 UTC, cym13 wrote:
On Sunday, 31 July 2016 at 04:55:31 UTC, deadalnix wrote:
On Saturday, 30 July 2016 at 21:42:42 UTC, cym13 wrote:
[...]
That doesn't help. In fact, it makes things worse as now
constructor calls and function call do not have the same
syntax. You've just created an holly mess in the parser.
If something we should strive to get constructor call more
like regular function call rather than less (for instance by
behaving the same way when it comes to IFTI).
It is also unclear how overload resolution is supposed to work.
If I may suggest one thing it is to not start with the
intended result for the DIP, but start from the intended
change int he language, then, and only then, examine what
comes out of it.
I don't understand this comment. This isn't about construction,
it's about initialization, the call can occur only at one
precise time and no there is no overload concern as there is no
function call. The proposed change is litteraly just equivalent
to the already existing struct initialization, just made usable:
struct S {
int a;
int b;
}
auto s = S(b:42);
// equivalent to
S s = { b:42 };
Having the possibility to initialize structs without tying them
to a variable
proves useful when combined with functions that take this
struct but those
functions aren't directly impacted by the change.
I think a feature like this would be very useful especially for
User Defined Attributes where it is not possible to write:
S s = {b:42}
Being able to write:
@S(b:42) void foo();
would be great. I do not think there is another solution for this
at the moment.
I am fine with using curly braces as well if it makes the grammar
more clean.
@S{b:42} void foo();