http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60081

--- Comment #4 from Stan Manilov <stanislav.manilov at gmail dot com> ---
Here is a simple way to reproduce the bug:

==============================
#include <vector>
#include <memory>

int main() {
        std::vector<std::unique_ptr<int>> v;
        std::unique_ptr<int> px(new int (1));
        v.push_back(px);
}
==============================

There is a bug in the code: push_back tries to copy the given element by
default. This should return an error along the lines of "Call to deleted copy
constructor of std::unique_ptr". Instead it gives ICE.

A solution to the bug in the code is to explicitly call std::move like so:

==============================
#include <vector>
#include <memory>

int main() {
        std::vector<std::unique_ptr<int>> v;
        std::unique_ptr<int> px(new int (1));
        v.push_back(std::move(px));
}
==============================

Reply via email to