<snip>
from the very beginning. This isn't new. And given that the C++ STL gets away with its containers not working with non-copyable elements, I think that that proves that you can have a major component in the standard library - containers no less - not support copyable elements and have it work and be
acceptable.

Semi-acceptable, and even then, no longer the case in C++. Before move semantics, yes, C++ containers were limited to copyable elements, which meant using raw pointers since auto_ptr couldn't be copied. It was a royal pain.

But for 4 years now I've been able to do this:

    std::vector<std::unique_ptr<MyClass>> stuff;
    stuff.emplace_back(new MyClass);
    auto ptr = std::unique_ptr<MyClass>(new MyClass);
    stuff.push_back(std::move(ptr));

Which won't compile with the `std::move` because unique_ptr isn't copyable. D has move semantics. C++98/03 did not. The comparison with C++ is no longer justified.

Ketmar has a point though. So do you. The worst part of D move semantics is not being able to copy a const variable, since copying is move + postblit and you can't move from a const object.

Atila

Reply via email to