I’m having issues compiling some multi_index_container code after upgrading from gcc 4.3.4 to gcc 4.6.1 and wondering if anyone can shed some light. Perhaps this should be directed to gcc, but I have not been able to reduce this to not include multi_index. The contrived code below is the furthest I have been able to reduce the problem so far:

 

  1 #include <boost/multi_index_container.hpp>

  2 #include <boost/multi_index/ordered_index.hpp>

  3 #include <boost/multi_index/member.hpp>

  4 #include <boost/multi_index/composite_key.hpp>

  5

  6 using namespace boost::multi_index;

  7

  8 struct Data{

  9   double _d;

10 };

11

 12 typedef multi_index_container< Data,

13     indexed_by< ordered_non_unique<

14           composite_key< Data, member<Data, double, &Data::_d> >

15     > >

16 > Map;

17

 18 template <int T>

19 void foo(){

20    Map mi;

21    mi.get<0>().equal_range(boost::make_tuple(0.0));

22 }

23 int main(){

24   foo<5>();

25 }

 

The failures from gcc 4.6.1 are:

 

boost/multi_index/detail/index_base.hpp: In function 'void foo() [with int T = 5]':

boost/multi_index/detail/index_base.hpp:49:47: error: 'typedef struct boost::multi_index::detail::index_node_base<Data, std::allocator<Data> > boost::multi_index::detail::index_base<Data, boost::multi_index::indexed_by<boost::multi_index::ordered_non_unique<boost::multi_index::composite_key<Data, boost::multi_index::member<Data, double, &Data::_d> > > >, std::allocator<Data> >::node_type' is protected

tstmi.cpp:24:10: error: within this context

 

 

This code appears to compile fine under 4.3.4 and would compile with 4.6.1 if the useless template at line 18 was removed.

 

Many thanks