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