diff --git a/src/util/indirect.hpp b/src/util/indirect.hpp
index 1e4dbba8ebe212da1b56c7709011a10efe793d69..30501e3d0fefe463c711607da85b0fca22f72006 100644
--- a/src/util/indirect.hpp
+++ b/src/util/indirect.hpp
@@ -38,7 +38,9 @@ template <typename RASeq, typename Seq>
 auto indirect_view(RASeq& data, const Seq& index_map)
 DEDUCED_RETURN_TYPE(transform_view(index_map, impl::indirect_accessor<RASeq&>(data)));
 
-template <typename RASeq, typename Seq>
+// icpc 17 fails to disambiguate without further qualification, so
+// we replace `template <typename RASeq, typename Seq>` with the following:
+template <typename RASeq, typename Seq, typename = util::enable_if_t<!std::is_reference<RASeq>::value>>
 auto indirect_view(RASeq&& data, const Seq& index_map)
 DEDUCED_RETURN_TYPE(transform_view(index_map, impl::indirect_accessor<RASeq>(std::move(data))));
 
diff --git a/src/util/iterutil.hpp b/src/util/iterutil.hpp
index 00e52d628475dde475c4d9e11e849c2df6c38b73..6c8e1350e1f20ded2c5ead857979138e8d25a037 100644
--- a/src/util/iterutil.hpp
+++ b/src/util/iterutil.hpp
@@ -89,8 +89,8 @@ auto back(Seq& seq) -> decltype(*std::begin(seq)) {
  */
 template <typename V>
 struct pointer_proxy: public V {
-    pointer_proxy(const V& v): V{v} {}
-    pointer_proxy(V&& v): V{std::move(v)} {}
+    pointer_proxy(const V& v): V(v) {}
+    pointer_proxy(V&& v): V(std::move(v)) {}
     const V* operator->() const { return this; }
 };