Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Idempotent modifiers in C#

Tags:

c#

csc

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

like image 428
xdevel2000 Avatar asked Nov 13 '15 14:11

xdevel2000


1 Answers

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.

like image 169
Jon Skeet Avatar answered Sep 20 '22 22:09

Jon Skeet