Boost logo

Boost :

From: Jim Apple (japple_at_[hidden])
Date: 2003-12-08 19:35:52


Count and mismatch are broken, While I was on the file I messed with
some other stuff. See below:

My Q's and A's

Q: Should all constant reference parameters in standard algorithms be
constant int BLL clones?

A: Yes, why copy?

Q: Should this use reference_wrapper instead?

A: I don't know

Q: Should all member functions be constant? constant volatile?

A: Yes. I don't know, is there any reason to make them volatile?

Q: Should the number of template parameters be the same as in the standard?

A: Yes.

Q: Should we generate all of these via the preprocessor library?

A: I don't know.

Diff file is below. Please excuse me not sending it as an attachment -
my mail reader crashes when I try to do so.

Jim Apple

--- algorithm.hpp 2002-10-30 16:10:03.000000000 -0500
+++ algorithm4.hpp 2003-12-08 19:20:41.000000000 -0500
@@ -38,9 +38,9 @@
>::type type;
    };

- template <class A, class B, class C>
+ template <class A, class C>
    C
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::for_each(a, b, c); }
  };

@@ -55,9 +55,9 @@
>::type type;
    };

- template <class A, class B, class C>
+ template <class A, class C>
    A
- operator()(A a, B b, const C& c) const
+ operator()(A a, A b, const C& c) const
    { return ::std::find(a, b, c); }
  };

@@ -73,9 +73,9 @@
>::type type;
    };

- template <class A, class B, class C>
+ template <class A, class C>
    A
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::find_if(a, b, c); }
  };

@@ -90,14 +90,14 @@
>::type type;
    };

- template <class A, class B, class C, class D>
+ template <class A, class C>
    A
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, C c, C d) const
    { return ::std::find_end(a, b, c, d); }

- template <class A, class B, class C, class D, class E>
+ template <class A, class C, class E>
    A
- operator()(A a, B b, C c, D d, E e) const
+ operator()(A a, A b, C c, C d, E e) const
    { return ::std::find_end(a, b, c, d, e); }

  };
@@ -113,14 +113,14 @@
>::type type;
    };

- template <class A, class B, class C, class D>
+ template <class A, class C>
    A
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, C c, C d) const
    { return ::std::find_first_of(a, b, c, d); }

- template <class A, class B, class C, class D, class E>
+ template <class A, class C, class E>
    A
- operator()(A a, B b, C c, D d, E e) const
+ operator()(A a, A b, C c, C d, E e) const
    { return ::std::find_first_of(a, b, c, d, e); }

  };
@@ -136,14 +136,14 @@
>::type type;
    };

- template <class A, class B >
+ template <class A>
    A
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { return ::std::adjacent_find(a, b); }

- template <class A, class B, class C>
+ template <class A, class C>
    A
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::adjacent_find(a, b, c); }

  };
@@ -161,10 +161,10 @@
>::difference_type type;
    };

- template <class A, class B >
+ template <class A, class C >
    typename ::std::iterator_traits<A>::difference_type
- operator()(A a, B b) const
- { return ::std::count(a, b); }
+ operator()(A a, A b, const C& c) const
+ { return ::std::count(a, b, c); }
  };

  // count_if ---------------------------------
@@ -180,9 +180,9 @@
>::difference_type type;
    };

- template <class A, class B, class C >
+ template <class A, class C >
    typename ::std::iterator_traits<A>::difference_type
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::count_if(a, b, c); }
  };

@@ -195,21 +195,25 @@
    struct sig {
      typedef typename boost::remove_const<
          typename boost::tuples::element<1, Args>::type
- >::type element_type;
+ >::type element1_type;

- typedef ::std::pair< element_type, element_type > type;
- };
+ typedef typename boost::remove_const<
+ typename boost::tuples::element<3, Args>::type
+ >::type element2_type;

- template <class A, class B >
- ::std::pair<A,A>
- operator()(A a, B b) const
- { return ::std::mismatch(a, b); }
+ typedef ::std::pair< element1_type, element2_type > type;
+ };

- template <class A, class B, class C>
- ::std::pair<A,A>
- operator()(A a, B b, C c) const
+ template <class A, class C>
+ ::std::pair<A,C>
+ operator()(A a, A b, C c) const
    { return ::std::mismatch(a, b, c); }

+ template <class A, class C, class D>
+ ::std::pair<A,C>
+ operator()(A a, A b, C c, D d) const
+ { return ::std::mismatch(a, b, c, d); }
+
  };

  // equal ---------------------------------
@@ -221,14 +225,14 @@
      typedef bool type;
    };

- template <class A, class B, class C >
+ template <class A, class C >
    bool
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::equal(a, b, c); }

- template <class A, class B, class C, class D>
+ template <class A, class C, class D>
    bool
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, C c, D d) const
    { return ::std::equal(a, b, c, d); }

  };
@@ -244,14 +248,14 @@
>::type type;
    };

- template <class A, class B, class C, class D>
+ template <class A, class C>
    A
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, C c, C d) const
    { return std::search(a, b, c, d);}

- template <class A, class B, class C, class D, class E>
+ template <class A, class C, class E>
    A
- operator()(A a, B b, C c, D d, E e)
+ operator()(A a, A b, C c, C d, E e) const
    { return std::search(a, b, c, d, e);}

  };
@@ -267,9 +271,9 @@
>::type type;
    };

- template <class A, class B, class C>
+ template <class A, class C>
    C
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::copy(a, b, c); }

  };
@@ -285,9 +289,9 @@
>::type type;
    };

- template <class A, class B, class C>
+ template <class A, class C>
    C
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::copy_backward(a, b, c); }

  };
@@ -301,9 +305,9 @@
      typedef void type;
    };

- template <class A, class B>
+ template <class A>
    void
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { ::std::swap(a, b); }

  };
@@ -319,9 +323,9 @@
>::type type;
    };

- template <class A, class B, class C>
+ template <class A, class C>
    C
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::swap_ranges(a, b, c); }

  };
@@ -335,9 +339,9 @@
       typedef void type;
    };

- template <class A, class B>
+ template <class A>
    void
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { ::std::iter_swap(a, b); }

  };
@@ -357,14 +361,14 @@
>::type type;
    };

- template <class A, class B, class C, class D>
+ template <class A, class C, class D>
    C
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, C c, D d) const
    { return std::transform(a, b, c, d);}

- template <class A, class B, class C, class D, class E>
+ template <class A, class C, class D, class E>
    D
- operator()(A a, B b, C c, D d, E e)
+ operator()(A a, A b, C c, D d, E e) const
    { return std::transform(a, b, c, d, e);}

  };
@@ -378,9 +382,9 @@
      typedef void type;
    };

- template <class A, class B, class C, class D>
+ template <class A, class C>
    void
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, const C& c, const C& d) const
    { ::std::replace(a, b, c, d); }

  };
@@ -394,9 +398,9 @@
      typedef void type;
    };

- template <class A, class B, class C, class D>
+ template <class A, class C, class D>
    void
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, C c, const D& d) const
    { ::std::replace_if(a, b, c, d); }

  };
@@ -412,9 +416,9 @@
>::type type;
    };

- template <class A, class B, class C, class D, class E>
+ template <class A, class C, class D>
    C
- operator()(A a, B b, C c, D d, E e) const
+ operator()(A a, A b, C c, const D& d, const D& e) const
    { return ::std::replace_copy(a, b, c, d, e); }

  };
@@ -430,9 +434,9 @@
>::type type;
    };

- template <class A, class B, class C, class D, class E>
+ template <class A, class C, class D, class E>
    C
- operator()(A a, B b, C c, D d, E e) const
+ operator()(A a, A b, C c, D d, const E& e) const
    { return ::std::replace_copy_if(a, b, c, d, e); }

  };
@@ -446,9 +450,9 @@
       typedef void type;
    };

- template <class A, class B, class C>
+ template <class A, class C>
    void
- operator()(A a, B b, C c) const
+ operator()(A a, A b, const C& c) const
    { ::std::fill(a, b, c); }

  };
@@ -464,7 +468,7 @@

    template <class A, class B, class C>
    void
- operator()(A a, B b, C c) const
+ operator()(A a, B b, const C& c) const
    { ::std::fill_n(a, b, c); }

  };
@@ -478,9 +482,9 @@
       typedef void type;
    };

- template <class A, class B, class C>
+ template <class A, class C>
    void
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { ::std::generate(a, b, c); }

  };
@@ -512,9 +516,9 @@
>::type type;
    };

- template <class A, class B, class C >
+ template <class A, class C >
    A
- operator()(A a, B b, C c) const
+ operator()(A a, A b, const C& c) const
    { return ::std::remove(a, b, c); }
  };

@@ -529,9 +533,9 @@
>::type type;
    };

- template <class A, class B, class C >
+ template <class A, class C >
    A
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::remove_if(a, b, c); }
  };

@@ -546,9 +550,9 @@
>::type type;
    };

- template <class A, class B, class C, class D >
+ template <class A, class C, class D >
    C
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, C c, const D& d) const
    { return ::std::remove_copy(a, b, c, d); }
  };

@@ -563,9 +567,9 @@
>::type type;
    };

- template <class A, class B, class C, class D >
+ template <class A, class C, class D >
    C
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, C c, D d) const
    { return ::std::remove_copy_if(a, b, c, d); }
  };

@@ -580,14 +584,14 @@
>::type type;
    };

- template <class A, class B >
+ template <class A>
    A
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { return ::std::unique(a, b); }

- template <class A, class B, class C>
+ template <class A, class C>
    A
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::unique(a, b, c); }

  };
@@ -603,14 +607,14 @@
>::type type;
    };

- template <class A, class B, class C >
+ template <class A, class C >
    C
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::unique_copy(a, b, c); }

- template <class A, class B, class C, class D>
+ template <class A, class C, class D>
    C
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, C c, D d) const
    { return ::std::unique_copy(a, b, c, d); }

  };
@@ -624,9 +628,9 @@
      typedef void type;
    };

- template <class A, class B>
+ template <class A>
    void
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { ::std::reverse(a, b); }

  };
@@ -642,9 +646,9 @@
>::type type;
    };

- template <class A, class B, class C >
+ template <class A, class C >
    C
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::reverse_copy(a, b, c); }

  };
@@ -658,9 +662,9 @@
      typedef void type;
    };

- template <class A, class B, class C>
+ template <class A>
    void
- operator()(A a, B b, C c) const
+ operator()(A a, A b, A c) const
    { ::std::rotate(a, b, c); }

  };
@@ -676,9 +680,9 @@
>::type type;
    };

- template <class A, class B, class C, class D>
+ template <class A, class D>
    C
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, A c, D d) const
    { return ::std::rotate_copy(a, b, c, d); }

  };
@@ -692,14 +696,14 @@
      typedef void type;
    };

- template <class A, class B>
+ template <class A>
    void
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { ::std::random_shuffle(a, b); }

- template <class A, class B, class C>
+ template <class A, class C>
    void
- operator()(A a, B b, C c) const
+ operator()(A a, A b, const C& c) const
    { ::std::random_shuffle(a, b, c); }

  };
@@ -716,9 +720,9 @@
>::type type;
    };

- template <class A, class B, class C>
+ template <class A, class C>
    A
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::partition(a, b, c); }

  };
@@ -734,9 +738,9 @@
>::type type;
    };

- template <class A, class B, class C>
+ template <class A, class C>
    A
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::stable_partition(a, b, c); }

  };
@@ -750,14 +754,14 @@
       typedef void type;
    };

- template <class A, class B>
+ template <class A>
    void
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { ::std::sort(a, b); }

- template <class A, class B, class C>
+ template <class A, class C>
    void
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { ::std::sort(a, b, c); }

  };
@@ -771,14 +775,14 @@
       typedef void type;
    };

- template <class A, class B>
+ template <class A>
    void
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { ::std::stable_sort(a, b); }

- template <class A, class B, class C>
+ template <class A, class C>
    void
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { ::std::stable_sort(a, b, c); }

  };
@@ -792,14 +796,14 @@
       typedef void type;
    };

- template <class A, class B, class C>
+ template <class A>
    void
- operator()(A a, B b, C c) const
+ operator()(A a, A b, A c) const
    { ::std::partial_sort(a, b, c); }

- template <class A, class B, class C, class D>
+ template <class A, class D>
    void
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, A c, D d) const
    { ::std::partial_sort(a, b, c, d); }

  };
@@ -815,14 +819,14 @@
>::type type;
    };

- template <class A, class B, class C, class D >
+ template <class A, class C>
    C
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, C c, C d) const
    { return ::std::partial_sort_copy(a, b, c, d); }

- template <class A, class B, class C, class D, class E >
+ template <class A, class C, class E >
    C
- operator()(A a, B b, C c, D d, E e) const
+ operator()(A a, A b, C c, C d, E e) const
    { return ::std::partial_sort_copy(a, b, c, d, e); }
  };

@@ -835,14 +839,14 @@
       typedef void type;
    };

- template <class A, class B, class C>
+ template <class A>
    void
- operator()(A a, B b, C c) const
+ operator()(A a, A b, A c) const
    { ::std::nth_element(a, b, c); }

- template <class A, class B, class C, class D>
+ template <class A, class D>
    void
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, A c, D d) const
    { ::std::nth_element(a, b, c, d); }

  };
@@ -858,14 +862,14 @@
>::type type;
    };

- template <class A, class B, class C>
+ template <class A, class C>
    A
- operator()(A a, B b, C c) const
+ operator()(A a, A b, const C& c) const
    { return ::std::lower_bound(a, b, c); }

- template <class A, class B, class C, class D>
+ template <class A, class C, class D>
    A
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, const C& c, D d) const
    { return ::std::lower_bound(a, b, c, d); }

  };
@@ -881,14 +885,14 @@
>::type type;
    };

- template <class A, class B, class C>
+ template <class A, class C>
    A
- operator()(A a, B b, C c) const
+ operator()(A a, A b, const C& c) const
    { return ::std::upper_bound(a, b, c); }

- template <class A, class B, class C, class D>
+ template <class A, class C, class D>
    A
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, const C& c, D d) const
    { return ::std::upper_bound(a, b, c, d); }

  };
@@ -906,14 +910,14 @@
      typedef ::std::pair< element_type, element_type > type;
     };

- template <class A, class B, class C>
+ template <class A, class C>
    ::std::pair<A,A>
- operator()(A a, B b, C c) const
+ operator()(A a, A b, const C& c) const
    { return ::std::equal_range(a, b, c); }

- template <class A, class B, class C, class D>
+ template <class A, class C, class D>
    ::std::pair<A,A>
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, const C& c, D d) const
    { return ::std::equal_range(a, b, c, d); }

  };
@@ -927,14 +931,14 @@
      typedef bool type;
    };

- template <class A, class B, class C >
+ template <class A, class C >
    bool
- operator()(A a, B b, C c) const
+ operator()(A a, A b, const C& c) const
    { return ::std::binary_search(a, b, c); }

- template <class A, class B, class C, class D>
+ template <class A, class C, class D>
    bool
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, const C& c, D d) const
    { return ::std::binary_search(a, b, c, d); }

  };
@@ -950,14 +954,14 @@
>::type type;
    };

- template <class A, class B, class C, class D, class E>
+ template <class A, class C, class E>
    E
- operator()(A a, B b, C c, D d, E e) const
+ operator()(A a, A b, C c, C d, E e) const
    { return std::merge(a, b, c, d, e);}

- template <class A, class B, class C, class D, class E, class F>
+ template <class A, class C, class E, class F>
    E
- operator()(A a, B b, C c, D d, E e, F f)
+ operator()(A a, A b, C c, C d, E e, F f) const
    { return std::merge(a, b, c, d, e, f);}

  };
@@ -971,14 +975,14 @@
      typedef void type;
    };

- template <class A, class B, class C>
+ template <class A>
    void
- operator()(A a, B b, C c) const
+ operator()(A a, A b, A c) const
    { ::std::inplace_merge(a, b, c); }

- template <class A, class B, class C, class D>
+ template <class A, class D>
    void
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, A c, D d) const
    { ::std::inplace_merge(a, b, c, d); }

  };
@@ -992,14 +996,14 @@
      typedef bool type;
    };

- template <class A, class B, class C, class D>
+ template <class A, class C>
    bool
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, C c, C d) const
    { return ::std::includes(a, b, c, d); }

- template <class A, class B, class C, class D, class E>
+ template <class A, class C, class E>
    bool
- operator()(A a, B b, C c, D d, E e) const
+ operator()(A a, A b, C c, C d, E e) const
    { return ::std::includes(a, b, c, d, e); }

  };
@@ -1015,14 +1019,14 @@
>::type type;
    };

- template <class A, class B, class C, class D, class E>
+ template <class A, class C, class E>
    E
- operator()(A a, B b, C c, D d, E e) const
+ operator()(A a, A b, C c, C d, E e) const
    { return std::set_union(a, b, c, d, e);}

- template <class A, class B, class C, class D, class E, class F>
+ template <class A, class C, class E, class F>
    E
- operator()(A a, B b, C c, D d, E e, F f)
+ operator()(A a, A b, C c, C d, E e, F f) const
    { return std::set_union(a, b, c, d, e, f);}

  };
@@ -1038,14 +1042,14 @@
>::type type;
    };

- template <class A, class B, class C, class D, class E>
+ template <class A, class C, class E>
    E
- operator()(A a, B b, C c, D d, E e) const
+ operator()(A a, A b, C c, C d, E e) const
    { return std::set_intersection(a, b, c, d, e);}

- template <class A, class B, class C, class D, class E, class F>
+ template <class A, class C, class E, class F>
    E
- operator()(A a, B b, C c, D d, E e, F f)
+ operator()(A a, A b, C c, C d, E e, F f) const
    { return std::set_intersection(a, b, c, d, e, f);}

  };
@@ -1061,14 +1065,14 @@
>::type type;
    };

- template <class A, class B, class C, class D, class E>
+ template <class A, class C, class E>
    E
- operator()(A a, B b, C c, D d, E e) const
+ operator()(A a, A b, C c, C d, E e) const
    { return std::set_difference(a, b, c, d, e);}

- template <class A, class B, class C, class D, class E, class F>
+ template <class A, class C, class E, class F>
    E
- operator()(A a, B b, C c, D d, E e, F f)
+ operator()(A a, A b, C c, C d, E e, F f) const
    { return std::set_difference(a, b, c, d, e, f);}

  };
@@ -1085,14 +1089,14 @@
>::type type;
    };

- template <class A, class B, class C, class D, class E>
+ template <class A, class C, class E>
    E
    operator()(A a, B b, C c, D d, E e) const
    { return std::set_symmetric_difference(a, b, c, d, e);}

- template <class A, class B, class C, class D, class E, class F>
+ template <class A, class C, class E, class F>
    E
- operator()(A a, B b, C c, D d, E e, F f)
+ operator()(A a, A b, C c, C d, E e, F f) const
    { return std::set_symmetric_difference(a, b, c, d, e, f);}

  };
@@ -1106,14 +1110,14 @@
      typedef void type;
    };

- template <class A, class B>
+ template <class A>
    void
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { ::std::push_heap(a, b); }

- template <class A, class B, class C>
+ template <class A, class C>
    void
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { ::std::push_heap(a, b, c); }

  };
@@ -1127,14 +1131,14 @@
      typedef void type;
    };

- template <class A, class B>
+ template <class A>
    void
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { ::std::pop_heap(a, b); }

- template <class A, class B, class C>
+ template <class A, class C>
    void
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { ::std::pop_heap(a, b, c); }

  };
@@ -1149,14 +1153,14 @@
      typedef void type;
    };

- template <class A, class B>
+ template <class A>
    void
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { ::std::make_heap(a, b); }

- template <class A, class B, class C>
+ template <class A, class C>
    void
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { ::std::make_heap(a, b, c); }

  };
@@ -1170,14 +1174,14 @@
      typedef void type;
    };

- template <class A, class B>
+ template <class A>
    void
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { ::std::sort_heap(a, b); }

- template <class A, class B, class C>
+ template <class A, class C>
    void
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { ::std::sort_heap(a, b, c); }

  };
@@ -1193,14 +1197,14 @@
>::type type;
    };

- template <class A, class B >
+ template <class A>
    A
- operator()(A a, B b) const
+ operator()(const A& a, const A& b) const
    { return ::std::min(a, b); }

- template <class A, class B, class C>
+ template <class A, class C>
    A
- operator()(A a, B b, C c) const
+ operator()(const A& a, const A& b, C c) const
    { return ::std::min(a, b, c); }

  };
@@ -1216,14 +1220,14 @@
>::type type;
    };

- template <class A, class B >
+ template <class A>
    A
- operator()(A a, B b) const
+ operator()(const A& a, const A& b) const
    { return ::std::max(a, b); }

- template <class A, class B, class C>
+ template <class A, class C>
    A
- operator()(A a, B b, C c) const
+ operator()(const A& a, const A& b, C c) const
    { return ::std::max(a, b, c); }

  };
@@ -1237,14 +1241,14 @@
>::type type;
    };

- template <class A, class B >
+ template <class A>
    A
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { return ::std::min_element(a, b); }

- template <class A, class B, class C>
+ template <class A, class C>
    A
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::min_element(a, b, c); }

  };
@@ -1260,14 +1264,14 @@
>::type type;
    };

- template <class A, class B >
+ template <class A>
    A
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { return ::std::max_element(a, b); }

- template <class A, class B, class C>
+ template <class A, class C>
    A
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::max_element(a, b, c); }

  };
@@ -1282,14 +1286,14 @@
      typedef bool type;
    };

- template <class A, class B, class C, class D>
+ template <class A, class C>
    bool
- operator()(A a, B b, C c, D d) const
+ operator()(A a, A b, C c, C d) const
    { return ::std::lexicographical_compare(a, b, c, d); }

- template <class A, class B, class C, class D, class E>
+ template <class A, class C, class E>
    bool
- operator()(A a, B b, C c, D d, E e) const
+ operator()(A a, A b, C c, C d, E e) const
    { return ::std::lexicographical_compare(a, b, c, d, e); }

  };
@@ -1303,14 +1307,14 @@
      typedef bool type;
    };

- template <class A, class B >
+ template <class A>
    bool
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { return ::std::next_permutation(a, b); }

- template <class A, class B, class C >
+ template <class A, class C >
    bool
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::next_permutation(a, b, c); }

  };
@@ -1324,14 +1328,14 @@
      typedef bool type;
    };

- template <class A, class B >
+ template <class A>
    bool
- operator()(A a, B b) const
+ operator()(A a, A b) const
    { return ::std::prev_permutation(a, b); }

- template <class A, class B, class C >
+ template <class A, class C >
    bool
- operator()(A a, B b, C c) const
+ operator()(A a, A b, C c) const
    { return ::std::prev_permutation(a, b, c); }

  };


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk