[Patch] First bits of the algo merge
Howard Hinnant
hhinnant@apple.com
Thu Dec 15 02:42:00 GMT 2005
This is pretty impressive stuff. Really nice job to both Paolo and
Chris. I put on my pedantic hat and what is below is all I could
find to whine about out of hundreds of changes (and I was really
trying to be picky). By the end of it, my eyes were pretty blurry,
so please scrutinize my complaints as much as I did your quality patch.
-Howard
On Dec 14, 2005, at 4:40 PM, Paolo Carlini wrote:
> Paolo Carlini wrote:
>
> @@ -2903,11 +2944,16 @@
> _InputIterator2 __first2, _InputIterator2 __last2,
> _OutputIterator __result)
> {
> + typedef typename iterator_traits<_InputIterator1>::value_type
> + _ValueType1;
> + typedef typename iterator_traits<_InputIterator2>::value_type
> + _ValueType2;
> +
> // concept requirements
> - __glibcxx_function_requires(_LessThanComparableConcept<
> - typename iterator_traits<_InputIterator1>::value_type>)
> + __glibcxx_function_requires
> (_LessThanComparableConcept<_ValueType1>)
> +
> return std::merge(__first1, __last1, __first2, __last2,
> __result,
> - __gnu_cxx::__ops::less());
> + __gnu_cxx::__ops::less<_ValueType2, _ValueType1>());
> }
>
> /**
I'm wondering if this shouldn't be:
__glibcxx_function_requires(_LessThanOpConcept<_ValueType2,
_ValueType1>);
> // Set algorithms: includes, set_union, set_intersection,
> set_difference,
> @@ -3635,11 +3691,16 @@
> includes(_InputIterator1 __first1, _InputIterator1 __last1,
> _InputIterator2 __first2, _InputIterator2 __last2)
> {
> + typedef typename iterator_traits<_InputIterator1>::value_type
> + _ValueType1;
> + typedef typename iterator_traits<_InputIterator2>::value_type
> + _ValueType2;
> +
> // concept requirements
> - __glibcxx_function_requires(_LessThanComparableConcept<
> - typename iterator_traits<_InputIterator1>::value_type>)
> - return std::includes(__first1, __last1, __first2, __last2,
> - __gnu_cxx::__ops::less());
> + __glibcxx_function_requires
> (_LessThanComparableConcept<_ValueType1>)
> +
> + return std::includes(__first1, __last1, __first2, __last2,
> + __gnu_cxx::__ops::less<_ValueType1, _ValueType2>());
> }
>
And this:
__glibcxx_function_requires(_LessThanOpConcept<_ValueType1,
_ValueType2>)
__glibcxx_function_requires(_LessThanOpConcept<_ValueType2,
_ValueType1>)
> /**
> @@ -3729,11 +3790,16 @@
> _InputIterator2 __first2, _InputIterator2 __last2,
> _OutputIterator __result)
> {
> + typedef typename iterator_traits<_InputIterator1>::value_type
> + _ValueType1;
> + typedef typename iterator_traits<_InputIterator2>::value_type
> + _ValueType2;
> +
> // concept requirements
> - __glibcxx_function_requires(_LessThanComparableConcept<
> - typename iterator_traits<_InputIterator1>::value_type>)
> - return std::set_union(__first1, __last1, __first2, __last2,
> __result,
> - __gnu_cxx::__ops::less());
> + __glibcxx_function_requires
> (_LessThanComparableConcept<_ValueType1>)
> +
> + return std::set_union(__first1, __last1, __first2, __last2,
> __result,
> + __gnu_cxx::__ops::less<_ValueType1, _ValueType2>());
> }
And here:
__glibcxx_function_requires(_LessThanOpConcept<_ValueType1,
_ValueType2>)
__glibcxx_function_requires(_LessThanOpConcept<_ValueType2,
_ValueType1>)
>
> /**
> @@ -3814,11 +3880,17 @@
> _InputIterator2 __first2, _InputIterator2 __last2,
> _OutputIterator __result)
> {
> + typedef typename iterator_traits<_InputIterator1>::value_type
> + _ValueType1;
> + typedef typename iterator_traits<_InputIterator2>::value_type
> + _ValueType2;
> +
> // concept requirements
> - __glibcxx_function_requires(_LessThanComparableConcept<
> - typename iterator_traits<_InputIterator1>::value_type>)
> + __glibcxx_function_requires
> (_LessThanComparableConcept<_ValueType1>)
> +
> return std::set_intersection(__first1, __last1, __first2,
> __last2,
> - __result, __gnu_cxx::__ops::less());
> + __result, __gnu_cxx::__ops::
> + less<_ValueType1, _ValueType2>());
> }
>
And here:
__glibcxx_function_requires(_LessThanOpConcept<_ValueType1,
_ValueType2>)
__glibcxx_function_requires(_LessThanOpConcept<_ValueType2,
_ValueType1>)
> /**
> @@ -3905,11 +3977,17 @@
> _InputIterator2 __first2, _InputIterator2 __last2,
> _OutputIterator __result)
> {
> + typedef typename iterator_traits<_InputIterator1>::value_type
> + _ValueType1;
> + typedef typename iterator_traits<_InputIterator2>::value_type
> + _ValueType2;
> +
> // concept requirements
> - __glibcxx_function_requires(_LessThanComparableConcept<
> - typename iterator_traits<_InputIterator1>::value_type>)
> + __glibcxx_function_requires
> (_LessThanComparableConcept<_ValueType1>)
> +
> return std::set_difference(__first1, __last1, __first2,
> __last2,
> - __result, __gnu_cxx::__ops::less());
> + __result, __gnu_cxx::__ops::
> + less<_ValueType1, _ValueType2>());
> }
And here:
__glibcxx_function_requires(_LessThanOpConcept<_ValueType1,
_ValueType2>)
__glibcxx_function_requires(_LessThanOpConcept<_ValueType2,
_ValueType1>)
>
> /**
> @@ -3998,11 +4076,16 @@
> _InputIterator2 __first2, _InputIterator2 __last2,
> _OutputIterator __result)
> {
> + typedef typename iterator_traits<_InputIterator1>::value_type
> + _ValueType1;
> + typedef typename iterator_traits<_InputIterator2>::value_type
> + _ValueType2;
> +
> // concept requirements
> - __glibcxx_function_requires(_LessThanComparableConcept<
> - typename iterator_traits<_InputIterator1>::value_type>)
> + __glibcxx_function_requires
> (_LessThanComparableConcept<_ValueType1>)
> return std::set_symmetric_difference(__first1, __last1,
> __first2, __last2,
> - __result, __gnu_cxx::__ops::less());
> + __result, __gnu_cxx::__ops::
> + less<_ValueType1, _ValueType2>());
> }
And here:
__glibcxx_function_requires(_LessThanOpConcept<_ValueType1,
_ValueType2>)
__glibcxx_function_requires(_LessThanOpConcept<_ValueType2,
_ValueType1>)
> } // namespace std
> Index: src/string-inst.cc
> ===================================================================
> --- src/string-inst.cc (revision 106945)
> +++ src/string-inst.cc (working copy)
> @@ -76,7 +76,7 @@
> template
> const C*
> __find_if(const C*, const C*,
> - __gnu_cxx::__ops::__bind2nd<bool(*)(const C&, const C&), C>,
> + __gnu_cxx::__ops::__bind2nd<C, C, bool(*)(const C&, const
> C&)>,
> random_access_iterator_tag);
> } // namespace std
I think a typeo here, not positive:
__gnu_cxx::__ops::__bind2nd<C, bool(*)(const C&, const C&)>,
-Howard
More information about the Libstdc++
mailing list