[Issue 15652] New: Alias this exceptions cannot be caught, but shadow others

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Sun Feb 7 12:54:58 PST 2016


https://issues.dlang.org/show_bug.cgi?id=15652

          Issue ID: 15652
           Summary: Alias this exceptions cannot be caught, but shadow
                    others
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: bugzilla at kyllingen.net

Say we have two exception classes, Foo and Bar, where Bar is a subtype of Foo
via "alias this":

    class Foo : Exception
    {
        this() { super("Foo"); }
    }

    class Bar : Exception
    {
        this()
        {
            super("Bar");
            foo = new Foo;
        }
        Foo foo;
        alias foo this;
    }

Now, we try to throw a Bar and catch it as a Foo:

    try { throw new Bar; }
    catch (Foo) { }

This compiles and runs, but does not work as expected; the exception is not
caught.  But then, that ought to mean that the following code is perfectly
fine:

    try { throw new Bar; }
    catch (Foo) { /* ... */ }  // A
    catch (Bar) { /* ... */ }  // B

However, this doesn't even compile.

    Error: catch at [line A] hides catch at [line B]

I don't know what is supposed to be the correct behaviour here, but one of
these cases should work.

--


More information about the Digitalmars-d-bugs mailing list