bottom type as parameter or local variable, does that make sense?
Paul Backus
snarwin at gmail.com
Sat Jan 15 18:35:02 UTC 2022
On Saturday, 15 January 2022 at 17:57:02 UTC, Max Samukha wrote:
> On Saturday, 15 January 2022 at 16:55:49 UTC, Paul Backus wrote:
>> It can't. There are no values of type `noreturn`. The set of
>> all `noreturn` values is the empty set. That is literally the
>> definition of a bottom type.
>
> Right, but if we want to strictly follow the definitions, then
> we can't declare a variable of the empty type, because the
> definition of a variable is literally a name associated with a
> value, so we are back to where we started.
Technically, a variable is a name associated with a block of
memory, which may or may not contain a value. In the case of
`noreturn`, the block of memory has size 0, and there are no
possible values it can contain.
So, technically, a `noreturn` variable is impossible to
initialize. But since the compiler knows that the behavior of the
program can't possibly depend on the variable's value, it is free
to just skip the initialization altogether and leave the variable
uninitialized instead.
I guess you could make an argument that you should have to write
`noreturn x = void;` every time you declare a `noreturn`
variable. But even then, it would not be correct for `noreturn
x;` to result in an `assert(0)` at runtime--it would have to be a
*compile-time* error.
More information about the Digitalmars-d
mailing list