24 #ifndef VISIONCPP_INCLUDE_FRAMEWORK_TOOLS_TUPLE_HPP_
25 #define VISIONCPP_INCLUDE_FRAMEWORK_TOOLS_TUPLE_HPP_
35 template <
bool,
typename T =
void>
47 template <
class... Ts>
54 template <
class T,
class... Ts>
56 Tuple(T t, Ts... ts) : head(t), tail(ts...) {}
67 template <
size_t,
class>
73 template <
class T,
class... Ts>
85 template <
size_t k,
class T,
class... Ts>
96 template <
size_t k,
class... Ts>
110 template <
size_t k,
class T,
class... Ts>
111 typename EnableIf<k != 0,
112 typename ElemTypeHolder<k, Tuple<T, Ts...>>::type &>::type
124 template <
size_t k,
class... Ts>
125 typename EnableIf<k == 0,
126 const typename ElemTypeHolder<0, Tuple<Ts...>>::type &>::type
139 template <
size_t k,
class T,
class... Ts>
141 k != 0,
const typename ElemTypeHolder<k, Tuple<T, Ts...>>::type &>::type
152 template <
typename... Args>
154 return Tuple<Args...>(args...);
162 template <
typename... Args>
164 return sizeof...(Args);
171 template <
size_t... Is>
180 template <
size_t MIN,
size_t N,
size_t... Is>
188 template <
size_t MIN,
size_t... Is>
200 template <
size_t MIN,
size_t N,
size_t... Is>
206 template <
size_t MIN,
size_t MAX>
219 template <
typename... Args,
typename T,
size_t... I>
234 template <
typename... Args,
typename T>
253 template <
typename... Args1,
typename... Args2,
size_t... I1,
size_t... I2>
260 internal::tools::tuple::get<I1>(t1)...,
261 internal::tools::tuple::get<I2>(t2)...);
274 template <
typename... Args1,
typename... Args2>