This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [Patch] First bits of the algo merge
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