You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by Martin Sebor <se...@roguewave.com> on 2008/03/10 03:50:52 UTC
regression in string::replace()
When compiled with the latest trunk a number of Plum Hall tests fail
with the same error (see below). I reduced it to a small test case.
I suspect http://svn.apache.org/viewcvs?view=rev&rev=629550. Farid,
can you take a look at it whenever you have a minute?
Martin
#include <string>
template <class Iter, class T>
struct Iterator
: public std::iterator<std::input_iterator_tag, T>
{
Iter it;
Iterator (Iter i): it (i) { }
bool operator== (const Iterator &rhs) const { return it == rhs.it; }
bool operator!= (const Iterator &rhs) const { return !(*this == rhs); }
T operator*() const { return *it; }
T *operator->() const { return &**this; }
Iterator& operator++() { ++it; }
Iterator operator++(int) {
const Iterator tmp (*this);
++it;
return tmp;
}
};
int main ()
{
const std::string s1;
Iterator<std::string::const_iterator, char> i (s1.begin ());
Iterator<std::string::const_iterator, char> j (s1.end ());
std::string s2 (i, j);
}
Plum Hall LVS error:
$TOPDIR/include/string.cc: In member function ‘std::basic_string<_CharT,
_Traits, _Allocator>& std::basic_string<_CharT, _Traits,
_Allocator>::__replace_aux(__rw::__rw_debug_iter<std::basic_string<_CharT,
_Traits, _Allocator>, typename _Allocator::pointer, typename
_Allocator::pointer>, __rw::__rw_debug_iter<std::basic_string<_CharT,
_Traits, _Allocator>, typename _Allocator::pointer, typename
_Allocator::pointer>, _InputIter, _InputIter) [with _InputIter =
strict_input_iterator<__rw::__rw_debug_iter<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, const char*, char*>,
char>, _CharT = char, _Traits = std::char_traits<char>, _Allocator =
std::allocator<char>]’:
$TOPDIR/include/string.cc:517: instantiated from
‘std::basic_string<_CharT, _Traits, _Allocator>&
std::basic_string<_CharT, _Traits,
_Allocator>::replace(__rw::__rw_debug_iter<std::basic_string<_CharT,
_Traits, _Allocator>, typename _Allocator::pointer, typename
_Allocator::pointer>, __rw::__rw_debug_iter<std::basic_string<_CharT,
_Traits, _Allocator>, typename _Allocator::pointer, typename
_Allocator::pointer>, _InputIter, _InputIter, void*) [with _InputIter =
strict_input_iterator<__rw::__rw_debug_iter<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, const char*, char*>,
char>, _CharT = char, _Traits = std::char_traits<char>, _Allocator =
std::allocator<char>]’
$TOPDIR/include/string:614: instantiated from
‘std::basic_string<_CharT, _Traits, _Allocator>&
std::basic_string<_CharT, _Traits,
_Allocator>::replace(__rw::__rw_debug_iter<std::basic_string<_CharT,
_Traits, _Allocator>, typename _Allocator::pointer, typename
_Allocator::pointer>, __rw::__rw_debug_iter<std::basic_string<_CharT,
_Traits, _Allocator>, typename _Allocator::pointer, typename
_Allocator::pointer>, _InputIter, _InputIter) [with _InputIter =
strict_input_iterator<__rw::__rw_debug_iter<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, const char*, char*>,
char>, _CharT = char, _Traits = std::char_traits<char>, _Allocator =
std::allocator<char>]’
$TOPDIR/include/string:188: instantiated from
‘std::basic_string<_CharT, _Traits,
_Allocator>::basic_string(_InputIter, _InputIter, const _Allocator&)
[with _InputIter =
strict_input_iterator<__rw::__rw_debug_iter<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, const char*, char*>,
char>, _CharT = char, _Traits = std::char_traits<char>, _Allocator =
std::allocator<char>]’
$CONFORM/t211.dir/_2131Y_151.cpp:58: instantiated from here
$TOPDIR/include/string.cc:655: error: invalid cast of an rvalue
expression of type ‘char’ to type ‘const char&’