On Thursday, 26 February 2015 at 16:40:27 UTC, Zach the Mystic wrote:
I'm unclear about what you're saying. Can you give an example in code?


See below.

That would allow to copy a parameter reference to a global, which is dead unsafe.

Actually, it's not unsafe, so long as you have the parameter attribute `noscope` (or possibly `static`) working for you:


Consider :

void foo(T** a) {
    T** b = a; // OK
    T*  = ...;
    *b = c; // Legal because of your transitive clause,
            // but not safe as a can have an
            // arbitrary large lifetime.
}

This show that anything you reach through an indirection can have from the same lifetime as the indirection up to an infinite lifetime (and anything in between). When using it as an lvalue, you should consider the largest possible lifetime, when using it as an rvalue, you should consider the smallest (this is the only way to be safe).

Reply via email to