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

Reply via email to