std/process.d: nothrow functions which throw (in struct ProcessPipes)

Steven Schveighoffer schveiguy at gmail.com
Tue Jul 21 12:50:24 UTC 2020


On 7/21/20 8:44 AM, Drone1h wrote:
> Hello All,
> 
> In phobos/std/process.d, in the ProcessPipes struct, we can see a few 
> functions which are marked with "nothrow", but which (under some 
> conditions) throw:
> 
>      @property File stdout() @safe nothrow
>      {
>          if ((_redirectFlags & Redirect.stdout) == 0)
>              throw new Error("Child process' standard output stream 
> hasn't "
>                              ~"been redirected.");
>          return _stdout;
>      }
> 
> Would it be possible to explain this, please ? Or point me to some 
> relevant documentation, please ?
> 
> Thank you.

nothrow only pertains to Exceptions, not Errors.

Throwing an Error isn't guaranteed to unwind the stack properly (which 
is why it can be done within nothrow), and the program should exit if it 
ever happens. An Error is a programming mistake (it should never happen 
if you wrote your code correctly), whereas an Exception can happen due 
to environmental issues or user input.

-Steve


More information about the Digitalmars-d-learn mailing list