www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - core.thread.Thread.start is marked as "nothrow" but documentation says

reply tcak <1ltkrs+3wyh1ow7kzn1k sharklasers.com> writes:
https://dlang.org/phobos/core_thread.html#.Thread

final nothrow Thread.start()

Looking at the code, no "throw new ..." is seen, but the function 
"onThreadError" is called
which has "throw" in it.

Most weird thing is that "onThreadError" function is marked as 
"nothrow" but it still throws.

I would think that yes, maybe the compiler might not be able to 
see it because throw is found
in another function, but how come "onThreadError" throws with 
nothrow.
Jan 23 2016
parent anonymous <anonymous example.com> writes:
On 23.01.2016 12:44, tcak wrote:
 https://dlang.org/phobos/core_thread.html#.Thread

 final nothrow Thread.start()

 Looking at the code, no "throw new ..." is seen, but the function
 "onThreadError" is called
 which has "throw" in it.

 Most weird thing is that "onThreadError" function is marked as "nothrow"
 but it still throws.

 I would think that yes, maybe the compiler might not be able to see it
 because throw is found
 in another function, but how come "onThreadError" throws with nothrow.
onThreadError [1] throws a ThreadError [2] which derives from Error, as the name suggests. nothrow functions may throw Errors, because Errors are considered a way of force-exiting the program. Errors are not supposed to be caught. So onThreadError is fine. And if Thread.start can actually only throw ThreadError, and not ThreadException, then that one is ok too, but the documentation is wrong and should be fixed. [1] https://github.com/D-Programming-Language/druntime/blob/33f1962747801be35a48f4875c909e16747fdcce/src/core/thread.d#L2972 [2] https://github.com/D-Programming-Language/druntime/blob/33f1962747801be35a48f4875c909e16747fdcce/src/core/thread.d#L88
Jan 23 2016