Idempotent modifiers in C#
C#CscC# Problem Overview
I noticed that if I write something like:
static void Main(string[] args)
{
const const const bool flag = true;
}
The compiler doesn't warn me of the multiple const
s. So this seems to mimic C modifiers, as they are idempotent.
However, if I write:
private readonly readonly int a;
The compiler does warn me of the duplicated readonly
.
So what's going on here? Are modifiers idempotent or not?
csc version 1.0.0.50618
C# Solutions
Solution 1 - C#
It's a bug in the compiler - at least in Roslyn version 1.0.0.50618. From section 8.5.2 of the C# 5 specification:
> A local-constant-declaration declares one or more local constants.
>
> local-constant-declaration:
> const
type constant-declarators
>
> constant-declarators:
> constant-declarator
> constant-declarators ,
constant-declarator
>
> constant-declarator:
> identifier =
constant-expression
As you can see, that grammar doesn't allow for const const const bool flag = true;
.
I've filed a bug against Roslyn so that it can get fixed.