On Tuesday, 18 March 2025 at 18:04:12 UTC, Steven Schveighoffer wrote:
On Tuesday, 18 March 2025 at 07:42:37 UTC, Jonathan M Davis wrote:
The base class constructors are not nothrow, so WrappedTCP's constructor cannot be nothrow. There really isn't a way out of that, because if a constructor throws, the object's state is destroyed. So, catching and handling the Exception to make your function nothrow isn't really an option like it would be with many functions.

FWIW, this does compile:

```d
class A
{
    this() {}
}

class B : A
{
    this() nothrow {
        try {
            super();
        } catch(Exception e) {}
    }
}
```
Not sure if it should...

-Steve

Interesting that it doesn't break anything really.

```
import std;

class A
{
    this() { throw new Exception("test"); }
}

class B : A
{
    int a;

    this() nothrow {
        try {
            super();
        } catch(Exception e) {}
    }
}


void main()
{
    auto b = new B;
    b.a = 200;

    writeln(b.a);
}
```

Reply via email to