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