Flatten a range of static arrays
Steven Schveighoffer
schveiguy at gmail.com
Sat Feb 8 14:57:21 UTC 2020
On 2/7/20 8:38 PM, ag0aep6g wrote:
> If that code were allowed, you could do this:
>
> ----
> struct Joiner
> {
> Joiner* p;
> }
> Joiner g;
> void main() @safe
> {
> scope Joiner j;
> () @trusted { j.p = &j; } (); /* pretend it's allowed */
> g = *j.p; /* dereference and copy */
> }
> ----
>
> Returning a copy of a dereferenced `scope` pointer is always allowed,
> because `scope` only provides one level of protection.
Again, the limitations of dip1000 are apparent. Why can't I mark p as
only pointing at scope data? And in which cases do I need to do this (in
the true Joiner code)?
This kind of stuff is so difficult to reason about and develop as a
library that people will just end up removing dip1000 from their
compilation.
-Steve
More information about the Digitalmars-d-learn
mailing list