Request Short Link
C++ 98
C++ 11
C++ 14
C++ 17
C++ 20
C++ 23
C++ 2c
for-loops as while-loops
array subscription
Show all implicit casts
Show all template parameters of a CallExpr
Use libc++
Transform std::initializer_list
Show noexcept internals
Show padding information
Show coroutine transformation
Show C++ to C transformation
Show object lifetime
Default
15
18
20
22
26
More
GitHub
Patreon
Patreon
Issues
About
Policies
Examples
C++ Insights @ YouTube
Settings
Version
None
×
Sponsors:
Made by
Andreas Fertig
Source:
#include <tuple> #include <type_traits> template <class Haystack, class Needle> struct contains; template <class Car, class... Cdr, class Needle> struct contains<std::tuple<Car, Cdr...>, Needle> : contains<std::tuple<Cdr...>, Needle> {}; template <class... Cdr, class Needle> struct contains<std::tuple<Needle, Cdr...>, Needle> : std::true_type {}; template <class Needle> struct contains<std::tuple<>, Needle> : std::false_type {}; template <class Out, class In> struct filter; template <class... Out, class InCar, class... InCdr> struct filter<std::tuple<Out...>, std::tuple<InCar, InCdr...>> { using type = typename std::conditional< contains<std::tuple<Out...>, InCar>::value , filter<std::tuple<Out...>, std::tuple<InCdr...>> , filter<std::tuple<Out..., InCar>, std::tuple<InCdr...>> >::type::type; }; template <class Out> struct filter<Out, std::tuple<>> { using type = Out; }; template <class T> using without_duplicates = typename filter<std::tuple<>, T>::type; int main() { static_assert(std::is_same<without_duplicates<std::tuple<int, char>>, std::tuple<int, char>>::value); static_assert(std::is_same<without_duplicates<std::tuple<int, char, int>>, std::tuple<int, char>>::value); static_assert(std::is_same<without_duplicates<std::tuple<int, int, char>>, std::tuple<int, char>>::value); static_assert(std::is_same<without_duplicates<std::tuple<int, char, char, int, char>>, std::tuple<int, char>>::value); }
Insight:
Console: