You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A single-argument additional constructor (i.e., a non-primary constructor declared with new) must have parentheses around its argument only if it is followed by another additional constructor.
Repro steps
Define a type with multiple additional constructors, one of which takes a single atomic argument pattern.
If the single-argument additional constructor is the last (or only) additional constructor, the argument does not need to be parenthesized; if any additional constructors follow it, the argument does need to be parenthesized.
This:
typeT(x,y)=new(x)= T (x,3)
can be simplified to
typeT(x,y)=new x = T (x,3)
Likewise:
typeT(x,y)=new(x,y,z)= T (x, y)new(x)= T (x,3)
can become
typeT(x,y)=new(x,y,z)= T (x, y)new x = T (x,3)
But if there's another constructor and it comes after the single-argument one:
typeT(x,y)=new(x)= T (x,3)new(x,y,_z)= T (x, y)
the parentheses must stay
>typeT(x,y)=-new x = T (x,3)-new(x,y,_z)= T (x, y);;new(x,y,_z)= T (x, y);;-------------------^
stdin(3,20): error FS0010: Unexpected symbol '='in expression
The removal of the parentheses has a significant effect on the way the following additional constructors are parsed:
A single-argument additional constructor (i.e., a non-primary constructor declared with
new
) must have parentheses around its argument only if it is followed by another additional constructor.Repro steps
This:
can be simplified to
Likewise:
can become
But if there's another constructor and it comes after the single-argument one:
the parentheses must stay
The removal of the parentheses has a significant effect on the way the following additional constructors are parsed:
Expected behavior
Parentheses should either always be required for a single-argument additional constructor, or they should never be required.
Actual behavior
Parentheses are required for a single-argument additional constructor only if it is not the last additional constructor.
Known workarounds
N/A.
Related information
Provide any related information (optional):
.NET SDK 8.0.100-rc.2.23502.2 (and probably long before).
The text was updated successfully, but these errors were encountered: