| |
| Posted by jfondren in reply to Rekel | PermalinkReply |
|
jfondren
| 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.
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.
|