#include <memory>
#include <vector>

template <typename T>
struct holder
{
    holder() = default;

    holder(const holder& b)
        : t(b.t)
    {
    }

    holder(holder&& b) = delete;

    holder& operator=(const holder& b)
    {
        t = b.t;
        return *this;
    }

    holder& operator=(holder&& b) = delete;

    T t;
};

typedef holder<std::unique_ptr<int>> ptr;

typedef std::vector<ptr> vec;

typedef vec test_t;

test_t foo();

int main()
{
    test_t x = foo();
    x = foo();
    return 0;
}
