with and shadowing variables

Steven Schveighoffer schveiguy at gmail.com
Mon Jul 23 17:26:16 UTC 2018


On 7/22/18 8:13 AM, Anonymouse wrote:
> Can this be made a compiler warning?
> 
> struct Foo
> {
>      int i;
> }
> 
> void main()
> {
>      Foo foo;
> 
>      with (foo)
>      {
>          i = 42;
>          int i;
>          i = 24;
>      }
> }
> 
> I'm hesitant to file a bug because it'll just be immediately closed with 
> a link to https://dlang.org/spec/statement.html#WithStatement. I 
> understand that's how it works, but it's weird and weak to human mistakes.

I'm with Jonathan, it should be an error. It shouldn't matter what scope 
you declared `i` in, just when you use it, the ambiguity should trigger. 
The fix is super-simple, name it something else!

Note that this won't fix other ambiguities. For example, if Foo has an 
opDispatch that matches "i", or `i` is a UFCS function (actually, I 
don't know if UFCS works using `with`).

-Steve


More information about the Digitalmars-d mailing list