Re: [boost] [multi_index]boost/boost/multi_index/detail/index_base.hpp:49:error

----- Mensaje original ----- De: Felipe Magno de Almeida <felipe.m.almeida@gmail.com> Fecha: Martes, Marzo 7, 2006 6:34 pm Asunto: Re: [boost][multi_index] boost/boost/multi_index/detail/index_base.hpp:49:error
On 3/6/06, Joaquín Mª López Muñoz <joaquin@tid.es> wrote:
[snip]
typedef std::pair<iterator, iterator> iterator_pair;
Here. What is this "iterator" type? What index.equal_range(name) returns is a
typedef headers_multi_index_t::nth_index<1>::type::iterator iterator;
[...]
Looks like that's not the problem
Yep, looks like this is OK, and, as you say, the thing works on other compilers. The following is a shot in the dark. Can replace your typedef headers_multi_index_t::nth_index<1>::type::iterator iterator; with something like typedef headers_multi_index_t::nth_index<1>::type::iterator my_iterator; // note, name changed adjust the dependent typedefs and try to compile? Older versions of GCC have sometimes clashing symbol problems with symbols that ought not to clash. Additionally, I'd check the using decls and directives in effect. If this does not shed any light, it'd be extremely helpful if you can isolate the problem into a complete testcase you can post or send to me. I've tried myself to reproduce the issue following your general code outline, but didn't get the compiler to choke as you have reported. Joaquín M López Muñoz Telefónica, Investigación y Desarrollo

On 3/7/06, JOAQUIN LOPEZ MU?Z <joaquin@tid.es> wrote:
----- Mensaje original ----- De: Felipe Magno de Almeida <felipe.m.almeida@gmail.com> Fecha: Martes, Marzo 7, 2006 6:34 pm Asunto: Re: [boost][multi_index] boost/boost/multi_index/detail/index_base.hpp:49:error
On 3/6/06, Joaquín Mª López Muñoz <joaquin@tid.es> wrote:
[snip]
typedef std::pair<iterator, iterator> iterator_pair;
Here. What is this "iterator" type? What index.equal_range(name) returns is a
typedef headers_multi_index_t::nth_index<1>::type::iterator iterator;
[...]
Looks like that's not the problem
Yep, looks like this is OK, and, as you say, the thing works on other compilers. The following is a shot in the dark. Can replace your
typedef headers_multi_index_t::nth_index<1>::type::iterator iterator;
with something like
typedef headers_multi_index_t::nth_index<1>::type::iterator my_iterator; // note, name changed
adjust the dependent typedefs and try to compile? Older versions of GCC have sometimes clashing symbol problems with symbols that ought not to clash. Additionally, I'd check the using decls and directives in effect.
If this does not shed any light, it'd be extremely helpful if you can isolate the problem into a complete testcase you can post or send to me. I've tried myself to reproduce the issue following your general code outline, but didn't get the compiler to choke as you have reported.
changing to my_iterator didnt worked too... So created a case smaller case where it fails to compile (now on gcc-4.1 and gcc-3.4.4). I'm sending you the error message and the source file. It compiles cleanly on VC7.1. The gcc seems to complain that equal_range in ordered_index isnt acessible, which doesnt seem to be the case...
Joaquín M López Muñoz Telefónica, Investigación y Desarrollo
Thank you very much for your help. -- Felipe Magno de Almeida

Felipe Magno de Almeida ha escrito: [...]
changing to my_iterator didnt worked too... So created a case smaller case where it fails to compile (now on gcc-4.1 and gcc-3.4.4). I'm sending you the error message and the source file. It compiles cleanly on VC7.1. The gcc seems to complain that equal_range in ordered_index isnt acessible, which doesnt seem to be the case...
Hello Felipe, In this case the problem is with the expression c.equal_range("lala") which should be index.equal_range("lala") The corrected version I'm sending you attached works fine here (GCC 3.2). The fact that your version compiled fine in VC 7.1 is a side effect of workarounds related to the defect signalled by the macro BOOST_NO_MEMBER_TEMPLATE_FRIENDS (see docs of Boost.Config on this macro.) I'm afraid this is not related to your original problem, so I stay tuned for further feedback from you. Joaquín M López Muñoz Telefónica, Investigación y Desarrollo

On 3/8/06, Joaquín Mª López Muñoz <joaquin@tid.es> wrote:
[snip]
Hello Felipe,
Hello Joaquin,
In this case the problem is with the expression
c.equal_range("lala")
which should be
index.equal_range("lala")
I see.
The corrected version I'm sending you attached works fine here (GCC 3.2). The fact that your version compiled fine in VC 7.1 is a side effect of workarounds related to the defect signalled by the macro BOOST_NO_MEMBER_TEMPLATE_FRIENDS (see docs of Boost.Config on this macro.)
Wroked here too now.
I'm afraid this is not related to your original problem, so I stay tuned for further feedback from you.
I found a workaround. Creating a local pair of the iterators and then passing it to the constructor makes the gcc 3.4.4 accept it. I think it is enough to me.
Joaquín M López Muñoz Telefónica, Investigación y Desarrollo
Thanks for all your time on this issue. -- Felipe Magno de Almeida
participants (3)
-
Felipe Magno de Almeida
-
JOAQUIN LOPEZ MU?Z
-
Joaquín Mª López Muñoz