| 167 | }; |
| 168 | |
| 169 | template <class V, class To> struct gen_seq_t { |
| 170 | using From = typename V::value_type; |
| 171 | const size_t N = cvt_input_data<From, To>.size(); |
| 172 | size_t offset = 0; |
| 173 | void operator++() { offset += V::size(); } |
| 174 | explicit operator bool() const { return offset < N; } |
| 175 | From operator()(size_t i) const |
| 176 | { |
| 177 | i += offset; |
| 178 | return i < N ? cvt_input_data<From, To>[i] : From(i); |
| 179 | } |
| 180 | }; |
| 181 | |
| 182 | template <class To> struct foo { |
| 183 | template <class T> auto operator()(const T &v) -> decltype(simd_cast<To>(v)); |