1 // { dg-do compile { target c++14 } }
5 template <std::size_t... Indexes>
6 struct index_sequence {};
9 template <class...> class Tuple {};
11 template <std::size_t I, class TFirst>
12 auto get(Tuple<TFirst>) {
16 template <std::size_t I, class Functor, class T1, class T2>
17 auto apply_impl(Functor f, T1 t1, T2 t2) {
18 return f(get<I>(t1), get<I>(t2));
21 template <std::size_t... Indexes, class Functor, class T1, class T2>
22 auto map_impl(std::index_sequence<Indexes...>, Functor f, T1 t1, T2 t2) {
23 Tuple<decltype(apply_impl<Indexes>(f, t1, t2))...>();
26 template <class Functor, class T1, class T2>
27 auto map_impl(Functor f, T1 t1, T2 t2) {
28 map_impl(std::index_sequence<0>(), f, t1, t2);
32 template <class Lhs, class Rhs>
33 auto operator()(Lhs lhs, Rhs rhs) -> decltype(lhs < rhs) {
39 auto t1 = Tuple<int>();
40 auto t2 = Tuple<int>();
41 map_impl(Less(), t1, t2);