On Monday, 2 August 2021 at 14:31:45 UTC, Rekel wrote:
I recently found one can return function calls to void
functions, though I don't remember any documentation mentioning
this even though it doesn't seem trivial.
```d
void print(){
writeln("0");
}
void doSomething(int a){
if (a==0)
return print();
writeln("1");
}
void main(string[] args) {
doSomething(0); // Prints 0 but not 1.
}
```
If this is intended, where could I find this in the docs? I
haven't been able to find previous mentions on this, neither on
the forum.
I don't know where you can find this in the docs, but what
doesn't seem trivial about it? The type of the expression
`print()` is void. That's the type that `doSomething` returns.
That's the type of the expression that `doSomething` does return
and the type of the expression following a `return` keyword in
`doSomething`. Rather than a rule expressly permitting this, I
would expect to find to either nothing (it's permitted because it
makes sense) or a rule against it (it's expressly forbidden
because it has to be to not work, because it makes sense).
C, C++, Rust, and Zig are all fine with this. Nim doesn't like it.