diff --git a/src/cell.hpp b/src/cell.hpp index 11f938f52f3e4e69a35f9a3eb951ca2fce95cbd6..0eb7c8133fb7908f4b725fce6ecb48bbfa82aa92 100644 --- a/src/cell.hpp +++ b/src/cell.hpp @@ -90,8 +90,11 @@ public: spike_detectors_(other.spike_detectors_), probes_(other.probes_) { - util::assign_by(segments_, other.segments_, - [](const segment_ptr& p) { return p->clone(); }); + // unique_ptr's cannot be copy constructed, do a manual assignment + auto siter = segments_.begin(); + for (const auto& s : other.segments_) { + *siter = std::move(s->clone()); + } } /// add a soma to the cell @@ -242,4 +245,3 @@ cable_segment* cell::add_cable(cell::index_type parent, Args ...args) } // namespace mc } // namespace nest - diff --git a/src/util/rangeutil.hpp b/src/util/rangeutil.hpp index 95b9faaca67efe165a8389fd2d2963ad80117b3d..839fb4527be34cf04777c65d7e934712aa7c57e3 100644 --- a/src/util/rangeutil.hpp +++ b/src/util/rangeutil.hpp @@ -12,6 +12,7 @@ #include <util/meta.hpp> #include <util/range.hpp> #include <util/transform.hpp> +#include <util/meta.hpp> namespace nest { namespace mc { @@ -67,12 +68,12 @@ AssignableContainer& assign(AssignableContainer& c, const Seq& seq) { return c; } + // Assign sequence to a container with transform `proj` template <typename AssignableContainer, typename Seq, typename Proj> AssignableContainer& assign_by(AssignableContainer& c, const Seq& seq, const Proj& proj) { - auto canon = canonical_view(transform_view(seq, proj)); - c.assign(std::begin(canon), std::end(canon)); + assign(c, transform_view(seq, proj)); return c; }