October 09, 2023 [Issue 24166] strange errors returning references to void | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=24166 RazvanN <razvan.nitu1305@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |razvan.nitu1305@gmail.com --- Comment #1 from RazvanN <razvan.nitu1305@gmail.com> --- I don't think that void arrays where defined so you can return individual elements. This opens a big hole in the type system. Consider the function signature: void foo(void[] b); When you look at this signature you understand that the function does not return anything. From that point of view, I was expecting that: ref void foo(void[] b); would yield a compilation error, but currently it does not (I would argue that this needs to be fixed, the compiler probably just ignores the ref). So, you do not expect that foo actually returns anything. But when void arrays come into play: void foo(void[] b) { return b[0]; } the signature of foo could mean 2 things: either you don't return nothing or you return a void variable. How would you even store that thing, cause you cannot declare a void variable and you cannot assign the value of a void function. So, my 2 cents: void arrays where designed just to be used inside the boundaries of a function: you store some data you receive from the network, you cast it to the appropriate type and then you return it. If you want to escape an element of the void array, you need to cast it. So the compiler is right to report the deprecation on line "return a[i]" but I guess it could be more explicit: "void functions cannot return elements of void arrays. If you want to return the element, please cast it to the appropriate type." -- |
Copyright © 1999-2021 by the D Language Foundation