
thanks, I know the reason now. it is because I have declared const on the member function where I iterate the sregex object. after I removed the const declaration, the compile passed. but I am still curious, I am not changing anything when I iterate the sregex object, why I cannot use the const declareation. To make it clear, I give a more complete formulation of the problem I encountered. class A { public: bool Match(const string& str) const; private: list<sregex> mRegexs; } bool A::Match(const string& str) const { std::list<boost::xpressive::sregex>::iterator it; for (it=mRegexs.begin(); it != mRegexs.end(); it++) { if (regex_match(str, *it)) { return true; } else { return false; } } return true; } in the above code, if I removed "const" declaration on the member function Match, the compilation passed, otherwise, there is error message like the following: myclass.cpp:57: error: no match for 'operator=' in 'it = ((const Myclass*)this)->Myclass::mRegexs.std::list<_Tp, _Alloc>::begin [with _Tp = boost::xpressive::basic_regex<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, _Alloc = std::allocator<boost::xpressive::basic_regex<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >]()' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_list.h:112: note: candidates are: std::_List_iterator<boost::xpressive::basic_regex<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >& std::_List_iterator<boost::xpressive::basic_regex<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::operator=(const std::_List_iterator<boost::xpressive::basic_regex<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >&) as for the problem with using vector together with sregex, here is what I found on web https://svn.boost.org/trac/boost/ticket/3712 At 2011-09-30 02:55:25,"Eric Niebler" <eric@boostpro.com> wrote:
On 9/29/2011 3:02 AM, Richard wrote:
hi,
I am trying to use stl::list<boost::xpressive::sregex>, but the following code cannot be complied
stl::list<boost::xpressive::sregex> rxs; sregex rex = boost::xpressive::sregex::compile("hello"); rxs.push_back(rex); 50 std::list<boost::xpressive::sregex>::iterator it; 51 52 for (it= rxs.begin(); it != rxs.end(); it++) 53 { //do something }
line 52, "it= rxs.begin()" cannot be complied, it said the no match operator =., what is wrong?
The following program compiles for me:
#include <list> #include <boost/xpressive/xpressive_dynamic.hpp>
int main() { std::list<boost::xpressive::sregex> rxs; boost::xpressive::sregex rex = boost::xpressive::sregex::compile("hello"); rxs.push_back(rex); std::list<boost::xpressive::sregex>::iterator it;
for (it= rxs.begin(); it != rxs.end(); it++) { //do something } }
So I don't know what the problem could be. What compiler/std-library are you using, and what version of boost?
by the way, I cannot use std::vector<boost::xpressive::sregex>, it compiled failed. I searched on web, it is said there is a bug with this issue. I do not want to change the version of boost library I used, so let's ignore this issue at the moment.
I don't remember that bug. Can you send a link to the ticket or to the mailing list discussion?
-- Eric Niebler BoostPro Computing http://www.boostpro.com _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users