@@ -198,7 +198,7 @@ namespace gridtools {
198198 template <class ...>
199199 struct values ;
200200
201- #if !defined(__NVCC__) && defined(__clang__) && __clang_major__ <= 17
201+ #if !defined(__NVCC__) && defined(__clang__)
202202 template <class ... Vs>
203203 values (Vs const &...) -> values<Vs...>;
204204#endif
@@ -213,16 +213,18 @@ namespace gridtools {
213213 template <class ... Keys>
214214 template <class ... Vals>
215215 struct keys <Keys...>::values {
216+ #if !defined(__clang__) || __clang_major__ < 18
216217 static_assert (sizeof ...(Vals) == sizeof...(Keys), "invalid hymap");
218+ #endif
217219
218220 tuple<Vals...> m_vals;
219221
220222 template <class ... Args,
221- std::enable_if_t <std::conjunction_v<std::is_constructible<Vals, Args>...>, int > = 0 >
223+ std::enable_if_t <sizeof ...(Args) == sizeof ...(Vals) &&
224+ std::conjunction_v<std::is_constructible<Vals, Args>...>,
225+ int > = 0 >
222226 constexpr GT_FUNCTION values (Args &&...args) noexcept : m_vals{std::forward<Args>(args)...} {}
223227
224- constexpr GT_FUNCTION values (Vals const &...args) noexcept : m_vals(args...) {}
225-
226228 constexpr GT_FUNCTION values (tuple<Vals...> &&args) noexcept : m_vals(std::move(args)) {}
227229 constexpr GT_FUNCTION values (tuple<Vals...> const &args) noexcept : m_vals(args) {}
228230
@@ -234,10 +236,7 @@ namespace gridtools {
234236
235237 template <class Src >
236238 constexpr GT_FUNCTION
237- std::enable_if_t <((!std::is_same_v<values, std::decay_t <Src>> && is_hymap<std::decay_t <Src>>::value) &&
238- ... &&
239- std::is_assignable_v<Vals &,
240- std::add_lvalue_reference_t <element_at<Keys, std::remove_reference_t <Src>>>>),
239+ std::enable_if_t <!std::is_same_v<values, std::decay_t <Src>> && is_hymap<std::decay_t <Src>>::value,
241240 values &>
242241 operator =(Src &&src) {
243242 (...,
0 commit comments