On Monday, 18 January 2016 at 21:39:09 UTC, Anon wrote:
On Monday, 18 January 2016 at 19:32:19 UTC, bitwise wrote:
struct S;

void func(ref S s);
func(S());   // FINE

void func(ref S s) @safe;
func(S());   // ERROR

Isn't that backwards? I mean, @safe functions can't escape their parameters, so whether or not it is a temporary shouldn't matter to a @safe function. Meanwhile, non-@safe *can* escape parameters, and would fail or at least lead to problems if it tried to escape a ref to a temporary.

On the other hand, banning @safe code from passing a temporary as a ref parameter, while allowing it in non-@safe code makes a bit more sense to me, but seems less desirable.

It turns out, you're right, but this only makes arguments against passing rvalues to ref params even _less_ valid.

You could simply allow rvalue->ref implicit instantiation right now, and @safe code would still be @safe, and unsafe code would be more convenient.

@safety seems like a very specific concern. Many people just won't need that kind of guarantee. Some will be perfectly happy ensuring the safety of their own code, while others simply won't care if their code is totally safe because they're writing low risk or very simple software.

    Bit

Reply via email to