[Issue 18912] New: [REG 2.080 git] "switch skips declaration" of foreach variable
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Sun May 27 11:35:10 UTC 2018
    
    
  
https://issues.dlang.org/show_bug.cgi?id=18912
          Issue ID: 18912
           Summary: [REG 2.080 git] "switch skips declaration" of foreach
                    variable
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: zorael at gmail.com
I have a function with a switch, with an inner foreach to generate cases based
on a template parameters .tupleof. It still works in 2.080.0 and even with
"dmd-nightly" on run.dlang.io, but not with dmd from git as of 180527.
---
struct Foo
{
    string abc, def;
}
void applyConfiguration(Thing)(ref Thing thing)
{
    switch ("asdf")
    {
        foreach (immutable n, ref member; thing.tupleof)
        {
            enum memberstring = __traits(identifier, Thing.tupleof[n]);
            case memberstring:
                // ...
                break;
        }
    default:
        break;
    }
}
void main()
{
    Foo foo;
    applyConfiguration(foo);
}
---
> switch.d(8): Error: `switch` skips declaration of variable `switch.applyConfiguration!(Foo).applyConfiguration.member` at switch.d(11)
> switch.d(27): Error: template instance `switch.applyConfiguration!(Foo)` error instantiating
The offending commit is eabc6a62b1d2f5924637f1e61464b9a975341dd4, "fix Issue
18858 - switch 'skips declaration' test only checks last declaration".
Is this a regression or was my code always broken?
--
    
    
More information about the Digitalmars-d-bugs
mailing list