On Friday, 27 January 2017 at 19:32:29 UTC, Jesse Phillips wrote:
On Thursday, 26 January 2017 at 00:02:03 UTC, Profile Anaysis
wrote:
Many times we pass compound types(non-primitives) as arguments
to functions.
I don't understand what issue you are solving. I see an
undefined syntax:
foo(|a,b,|c1,c2,3||,|e|,|f,g,c|)
To replace an existing syntax:
foo(T1(a,b,new X(c1,c2,c3)),T2(e),T3(f,g,c));
The primary difference I'm seeing is that the undefined syntax
doesn't specify what type is being created. To this end the one
time I recall desiring this is when using std.variant:
The type is deduced from the function call. There is no need to
specify it or specify new. This is why the syntax reduces the
complexity(of course, at the cost of increase terseness) and
lines.
e.g., for your foo to be valid, it must have a declaration of
foo(T1,T2,T3).
So why should we have to specify that when the compiler can do it
for us?
The special syntax informs the compiler that we are initializing
the types with the given arguments and it simply rewrites it in
the long hand form.
It can only be used when the type can be deduced.