[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

G++-3.x bug? user specified operator== not found/used by find



The following code does not compile with g++-3.0 and g++-3.1, but it does with g++-2.95.4. What is wrong (std:: is not missing!)?

#include <string>
#include <vector>
#include <utility>

typedef std::string s_t;
typedef std::pair<s_t,s_t> pair_t;

bool operator==(const pair_t &a,const s_t &b)
{  return a.first==b;
}

int main()
{  std::vector< pair_t > v;
   v.push_back(pair_t("test","value"));
   s_t name="test";
   if (v[0]==name) {}  // this works
   std::find(v.begin(),v.end(),name); // this does not
   return 0;
}


The fact that both 3.0 and 3.1 agree make me think of an error on my side. But (to me) it clearly looks like a g++ bug.

Please help me (and the glade-- project).
   Yours
     Christof

PS: The error message is
 g++-3.1 test.cc
/usr/include/g++-v3-3.1/bits/stl_algo.h: In function `_RandomAccessIter
   std::find(_RandomAccessIter, _RandomAccessIter, const _Tp&,
   std::random_access_iterator_tag) [with _RandomAccessIter =
   __gnu_cxx::__normal_iterator<pair_t*, std::vector<pair_t,
   std::allocator<pair_t> > >, _Tp = std::basic_string<char,
   std::char_traits<char>, std::allocator<char> >]':
/usr/include/g++-v3-3.1/bits/stl_algo.h:298: instantiated from `_InputIter std::find(_InputIter, _InputIter, const _Tp&) [with _InputIter = __gnu_cxx::__normal_iterator<pair_t*, std::vector<pair_t, std::allocator<pair_t> > >, _Tp = s_t]'
test.cc:17:   instantiated from here
/usr/include/g++-v3-3.1/bits/stl_algo.h:208: no match for `std::pair<s_t, s_t>&
   == const std::basic_string<char, std::char_traits<char>,
   std::allocator<char> >&' operator

which sounds pretty silly, doesn't it?


--
To UNSUBSCRIBE, email to debian-gcc-request@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org



Reply to: