Tomasz Kaminski [Monday, 23 February 2026 09:19:12 CET]:
> > I do not think that this should be a separate overload and another if
> > constexpr branch
> > In the default implementation.
> 
> That's what I initially did. It was horrible because I need to extract the
> first element and the remaining pack from __rest... to do so. I could make
> the function take 3 arguments + pack, but then I'd need an overload for the
> 2-arg case, which would the duplicate the implementation.
> What I could do is call a 3-arg + pack function/lambda from the constexpr-if
> branch, but personally I find the overload simpler (and hopefully cheaper
> to compile).
> I think you are already using pack indexing in the implementation of
> simd_mask,  so I do not see a problem here: if (sizeof...(rest) > 0) and
> _N0 > __Ns...[0].

__Ns...[0] is already something that needs to go the next nested constexpr-if:

if constexpr (__has_single_bit(unsigned(_N0)) && sizeof...(__rest) >= 2 && _N0 
> _N1)
{
  static constexpr array __tmp {_Ns...};
  constexpr auto& [_N2, ..._N3s] = __tmp;
  if constexpr (_N0 >= (_N1 + _N2))
    {
      const auto& [__c, ...__ds] = std::tie(__rest...);
      return __vec_concat_sized<_N0, _N1 + _N2, _N3s...>(
               __a, __vec_concat_sized<_N1, _N2>(__b, __c), __ds...);
    }
}
else { ... }

And now I need to duplicate the else branch or remove the 'else' altogether 
and have the code in the else branch unconditionally "visible".

-- 
──────────────────────────────────────────────────────────────────────────
 Dr. Matthias Kretz                           https://mattkretz.github.io
 GSI Helmholtz Center for Heavy Ion Research               https://gsi.de
 std::simd
──────────────────────────────────────────────────────────────────────────

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to