On 2014-01-17 16:18, Stanislav Blinov wrote:

As far as I understand it, it can. I mean, I don't see where I would
violate any of the rules attached to @safe. The only danger zone is
dereference, and that's protected by throwing. But I commented it out
because I started having doubts: in my unittests (they're in separate
module so they have the same access as the user code would) I have three
simple classes that don't have any @safe attributes on their functions.
Unique would fail to compile with those ("failed semantic analysis"). So
it would seem it's rather restrictive. I don't mind imposing
correctness, but how far should it go?


Just try and @safe and see what happens. These really are the cases where you can rely on the compiler telling you when you're do something wrong.

In my opinion, static assert allows for nicer error messages.

Yes, I agree. We had a discussion about this recently. I don't recall now, but there are some other advantages of using template constrains. Like it's working properly with __traits(compile).

Oh, yeah, those. Those would go away outside, as private members of a
module :)

Doesn't matter, private could should look just as good as public ;)

But that brings another point. No matter how opDot() could be replaced
(be it alias this or that potential mixin I mentioned), Unique does have
a public method of its own (release()). How would one resolve collisions
in this case? I mean, if a wrapped object has its own release() method?
In the opDot() case, one can write x.opDot().release(). Could similar be
done with alias this?

I don't think so, but via opDispatch you can do:

x.opDispatch!("release")();

--
/Jacob Carlborg

Reply via email to