diff --git a/src/cell.hpp b/src/cell.hpp index 6cadd28d70435672cd64a57cfd3b57ba22da6299..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 diff --git a/src/util/rangeutil.hpp b/src/util/rangeutil.hpp index 7d13aa0bd8c352b91de574f621f56eeeab87be4d..839fb4527be34cf04777c65d7e934712aa7c57e3 100644 --- a/src/util/rangeutil.hpp +++ b/src/util/rangeutil.hpp @@ -62,37 +62,13 @@ Container& append(Container &c, const Seq& seq) { // Assign sequence to a container template <typename AssignableContainer, typename Seq> -enable_if_t< - std::is_copy_constructible<typename AssignableContainer::value_type>::value, - AssignableContainer& -> -assign(AssignableContainer& c, const Seq& seq) { +AssignableContainer& assign(AssignableContainer& c, const Seq& seq) { auto canon = canonical_view(seq); c.assign(std::begin(canon), std::end(canon)); return c; } -// This version of assing is needed for assigning segment_ptr's (i.e., -// unique_ptr's) with Clang - -template<typename AssignableContainer, typename Seq> -enable_if_t< - !std::is_copy_constructible<typename AssignableContainer::value_type>::value && - std::is_move_constructible<typename AssignableContainer::value_type>::value, - AssignableContainer& -> -assign(AssignableContainer& c, const Seq& seq) -{ - auto citer = c.begin(); - for (auto s : canonical_view(seq)) { - *citer = std::move(s); - } - - return c; -} - - // Assign sequence to a container with transform `proj` template <typename AssignableContainer, typename Seq, typename Proj>