proposed @noreturn attribute

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Tue Jul 18 15:40:30 PDT 2017


On 18.07.2017 23:35, Moritz Maxeiner wrote:
> 
> Could you explain why `return foo();` is even legal for a `void foo() 
> {}`?

Because the ad-hoc decision to make void a type that is not really a 
type leads to unnecessary friction, and this exceptional rule removes 
the friction in one common special case.

> I wasn't aware of it before and the fact that you can 
> (syntactically) return the non-existent return value of `foo` raises 
> cognitive dissonance flags for me. I imagine there's a type system reason?

There should be. foo's return type could be a unit type, with just one 
value. Then foo does have a return value, but it is always the same and 
so does not need to be explicitly tracked.


More information about the Digitalmars-d mailing list