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
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-declaratorsconstant-declarators:
constant-declarator
constant-declarators,
constant-declaratorconstant-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.
See more on this question at Stackoverflow