diff --git a/src/cell.hpp b/src/cell.hpp
index 11f938f52f3e4e69a35f9a3eb951ca2fce95cbd6..6cadd28d70435672cd64a57cfd3b57ba22da6299 100644
--- a/src/cell.hpp
+++ b/src/cell.hpp
@@ -242,4 +242,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 46101e3eef8160124d73d60e730c31d34c85f7c1..7d13aa0bd8c352b91de574f621f56eeeab87be4d 100644
--- a/src/util/rangeutil.hpp
+++ b/src/util/rangeutil.hpp
@@ -7,10 +7,12 @@
 
 #include <algorithm>
 #include <iterator>
+#include <numeric>
 
 #include <util/meta.hpp>
 #include <util/range.hpp>
 #include <util/transform.hpp>
+#include <util/meta.hpp>
 
 namespace nest {
 namespace mc {
@@ -60,18 +62,42 @@ Container& append(Container &c, const Seq& seq) {
 // Assign sequence to a container
 
 template <typename AssignableContainer, typename Seq>
-AssignableContainer& assign(AssignableContainer& c, const Seq& seq) {
+enable_if_t<
+    std::is_copy_constructible<typename AssignableContainer::value_type>::value,
+    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>
 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;
 }