On Mittwoch, 22. Mai 2019 11:27:25 CEST Martin Reinecke wrote: > Still, I would need a way to determine how long the vectors actually > are. But it would probably be enough to measure this at runtime then.
FWIW, something that took me way too long to figure out: You can use vector builtins very conveniently in C++ with the traits I define at https:// github.com/VcDevel/std-simd/blob/59e6348a9d34b4ef4f5ef1fc4f423dd75e1987f3/ experimental/bits/simd.h#L925 (ignore _SimdWrapper: I'm working on phasing it out after I discovered the _VectorTraits solution). You'll need __vector_type, __is_vector_type and _VectorTraits and then you can write: template <typename T, typename VT = VectorTraits<T>> void f(T x) { using element_type = typename VT::value_type; constexpr auto N = VT::_S_width; ... } f(x) only participates in overload resolution if x is a vector builtin type because otherwise VectorTraits<T> leads to a substitution failure (SFINAE). -- ────────────────────────────────────────────────────────────────────────── Dr. Matthias Kretz https://kretzfamily.de GSI Helmholtzzentrum für Schwerionenforschung https://gsi.de SIMD easy and portable https://github.com/VcDevel/Vc ──────────────────────────────────────────────────────────────────────────