91 #include <type_traits>
105 template<
typename T,
typename...>
106 struct IsInList : std::false_type
109 template<
typename T,
typename First,
typename... Rest>
110 struct IsInList<T, First, Rest...>
111 : std::integral_constant<bool, std::is_same<T, First>::value || IsInList<T, Rest...>::value>
114 template<
typename T,
typename Tuple>
117 template<
typename T,
typename... Ts>
118 struct IsInTuple<T, std::tuple<Ts...>> : IsInList<T, Ts...>
121 template<
typename Tuple,
typename... Args>
122 struct AllArgsAreInTuple : std::true_type
125 template<
typename Tuple,
typename Arg,
typename... Args>
126 struct AllArgsAreInTuple<Tuple, Arg, Args...>
127 : std::integral_constant<bool, IsInTuple<Arg, Tuple>::value && AllArgsAreInTuple<Tuple, Args...>::value>
130 template<
typename... Args>
131 struct AllArgsDecayedAreUnique : std::true_type
134 template<
typename Head,
typename... Tail>
135 struct AllArgsDecayedAreUnique<Head, Tail...>
136 : std::integral_constant<
138 !IsInList<typename std::decay<Head>::type, typename std::decay<Tail>::type...>::value
139 && AllArgsDecayedAreUnique<Tail...>::value>
142 template<
typename... Ts>
145 template<
typename... T1s,
typename... T2s,
typename... Rest>
146 struct Concatenate<std::tuple<T1s...>, std::tuple<T2s...>, Rest...>
147 : Concatenate<std::tuple<T1s..., T2s...>, Rest...>
150 template<
typename... T1s>
151 struct Concatenate<std::tuple<T1s...>>
153 using Type = std::tuple<T1s...>;
The main Zivid namespace. All Zivid code is found here
Definition: Application.h:99