Idempotent modifiers in C#

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 consts. 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

Jon Skeet
people
quotationmark

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.

people

See more on this question at Stackoverflow