[patch] Unqualified calls to std::copy() in bits/vector.tcc
Jonathan Wakely
cow@compsoc.man.ac.uk
Wed Dec 29 13:01:00 GMT 2004
Our std::vector contains a few unqualified calls to std::copy().
This causes problems for Boost's Meta-Programming Library (where "copy"
is a functor) due to 3.4's improved ADL (see core DR 218, PR 17365 and
PR 17045 for related cases).
This isn't technically a regression, since these calls were always
unqualified until 3.4.0 but qualifications should probably have been
added to these calls along with all the others. It could be argued that
since previous versions didn't have correct ADL no conflicts arose, so
this is a regression.
Tested on i386/FreeBSD. Is this OK for mainline? and 3.4?
2004-12-29 Jonathan Wakely <redi@gcc.gnu.org>
include/bits/vector.tcc: Qualify all calls to std::copy().
I'm going on holiday so won't be able to commit this myself after today.
If it's approved then someone else might want to commit it sooner.
I think there are also a couple of unqualified calls in rope (lines 188
and 215) but I won't have time to check that properly before I go away.
jon
--
"There are basically two types of people. People who accomplish things,
and people who claim to have accomplished things.
The first group is less crowded."
- Mark Twain
-------------- next part --------------
Index: include/bits/vector.tcc
===================================================================
RCS file: /cvs/gcc/gcc/libstdc++-v3/include/bits/vector.tcc,v
retrieving revision 1.21
diff -u -p -b -B -r1.21 vector.tcc
--- include/bits/vector.tcc 21 Oct 2004 14:53:01 -0000 1.21
+++ include/bits/vector.tcc 29 Dec 2004 12:59:14 -0000
@@ -121,7 +121,7 @@ namespace _GLIBCXX_STD
vector<_Tp, _Alloc>::
erase(iterator __first, iterator __last)
{
- iterator __i(copy(__last, end(), __first));
+ iterator __i(std::copy(__last, end(), __first));
std::_Destroy(__i, end(), this->get_allocator());
this->_M_impl._M_finish = this->_M_impl._M_finish - (__last - __first);
return __first;
@@ -149,7 +149,7 @@ namespace _GLIBCXX_STD
}
else if (size() >= __xlen)
{
- iterator __i(copy(__x.begin(), __x.end(), begin()));
+ iterator __i(std::copy(__x.begin(), __x.end(), begin()));
std::_Destroy(__i, end(), this->get_allocator());
}
else
@@ -226,7 +226,7 @@ namespace _GLIBCXX_STD
}
else if (size() >= __len)
{
- iterator __new_finish(copy(__first, __last,
+ iterator __new_finish(std::copy(__first, __last,
this->_M_impl._M_start));
std::_Destroy(__new_finish, end(), this->get_allocator());
this->_M_impl._M_finish = __new_finish.base();
More information about the Libstdc++
mailing list