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; } };