On Tuesday, 20 January 2026 at 21:58:46 UTC, Ali Çehreli wrote:
What fails is the code inside 'main'.

> ```
> import std.stdio : writeln;
> import std.exception : enforce, assertThrown, assertNotThrown;
>
> void main()
> {
>      auto result = average([], []);
>
>      // assert is not caught in catch block
>      // enforce is caught in catch block
>      try
>      {
>          result = average([1], [1, 2]);
>      }
>      catch (Exception e)
>      {
>          writeln("Caught exception: ", e.msg);
>      }
> }

There is the issue: The exception type that assert throws is *not* under the Exception hierarchy but under the Error hierarchy:

 ```
            Throwable (not recommended to catch)
             ↗   ↖
    Exception     Error (not recommended to catch)
     ↗    ↖        ↗    ↖
   ...     ...    ...      ...
```

You could catch Throwable or Error. However, as they are not recommended to be caught, perhaps a better option is to change assert() to enforce(). enforce() throws a type under the Exception hierarchy.

Ali

That is true. I got rid of the try catch, with only the try body, and the unittest passes.

Ali, I am still working on the D Udemy course. It will likely be over 40 hours of tutorial video, based on your book. When released in the Spring, it should make it easy for newbies to master learning the D language, which is not trivial. I am working on it Full Time.

Hopefully, this will put D language back in the "Real" language category.
-- Brother Bill

Reply via email to