tinympl  0.2
mini MPL library for C++11
unique.hpp
1 // Copyright (C) 2013, Ennio Barbaro.
2 //
3 // Use, modification, and distribution is subject to the Boost Software
4 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // See http://sbabbi.github.io/tinympl for documentation.
8 //
9 // You are welcome to contact the author at:
10 // enniobarbaro@gmail.com
11 //
12 
13 #ifndef TINYMPL_VARIADIC_UNIQUE_HPP
14 #define TINYMPL_VARIADIC_UNIQUE_HPP
15 
16 #include <tinympl/variadic/remove.hpp>
17 
18 namespace tinympl {
19 namespace variadic {
20 
35 template<template<class ...> class Out, class ... Args> struct unique;
36 
37 template<template<class ...> class Out, class Head, class ... Tail>
38 struct unique<Out, Head, Tail...> {
39 private:
40  template<class ... Ts>
41  struct impl {
42  template<class ... Us> using next = unique<Out, Us...>;
43  typedef typename remove<Head, next, Tail...>::type::
44  template impl<Ts..., Head>::type type;
45  };
46 
47  template<template<class...> class, class...> friend struct unique;
48 
49 public:
50  typedef typename impl<>::type type;
51 
52 };
53 
54 template<template<class ...> class Out> struct unique<Out> {
55 private:
56  template<class ... Ts>
57  struct impl {
58  typedef Out<Ts...> type;
59  };
60 
61  template<template<class...> class, class...> friend struct unique;
62 
63 public:
64  typedef typename impl<>::type type;
65 };
66 
67 
68 } // namespace variadic
69 } // namespace tinympl
70 
71 #endif // TINYMPL_VARIADIC_UNIQUE_HPP
Produces a sequence of unique elements from the input sequence, preserving the ordering.
Definition: unique.hpp:35
Produces a sequence of unique elements from the input sequence, preserving the ordering.
Definition: unique.hpp:38