1 // PR c++/83856 2 // { dg-do compile { target c++14 } } 3 4 namespace std { 5 template <typename _Tp> _Tp declval(); 6 template <class _E> class initializer_list { 7 _E *_M_len; 8 9 public: 10 __SIZE_TYPE__ size; 11 _E begin(); 12 }; 13 template <typename, unsigned> struct array { void operator[](long); }; 14 } // namespace std 15 16 template <class> struct simd { 17 static int size(); 18 template <class F> simd(F, decltype(std::declval<F>()(0)) * = nullptr) {} 19 }; 20 template <class V, class... F> test_tuples(std::initializer_list<std::array<float,1>> data,F...fun_pack)21void test_tuples(std::initializer_list<std::array<float, 1>> data, 22 F... fun_pack) { 23 auto it = data.begin(); 24 const int remaining = V::size(); 25 [](...) {}((fun_pack([&](auto) { it[remaining]; }), 0)...); 26 } 27 f()28void f() { 29 test_tuples<simd<float>>({}, [](simd<float>) {}); 30 } 31