[range_ex] warning when using index operator on the element of a transformed range of a transformed range of a fusion sequence

Hello, I apologize in advance for the long explanation about a small problem... I tried to trim it down as much as I could right now. If it is still too much info, I can try to trim it down more... I am working in a context where I have Ranges of Ranges of fusion Sequences, and need to access different "slices" of said contraption. By that I mean, if I have a: std::vector<std::vector<fusion::vector<int, double> > > RoRoS, I would like to access a Range of Range of ints (consisting of the first elements of the fusion vector), and a Range of Range of doubles (consisting of the second elements). I wrote a little utility that allows me to do that (using RangeEx `transformed` adaptors) in the context of a for_each iteration (see attached "for_each_element_and_slice.hpp"). The purpose of this one is, given say a fusion::vector<foo,bar> S0; for_each_element_and_slice<1>(S0, RoRoS, some_fn) will call: some_fn (the foo element of S0, the Range of Range of ints) some_fn (the bar element of S0, the Range of Range of doubles) 1 specifies the "depth" - 1 means the second parameter is a Range of Range of Sequence, 0 would mean Range of Sequence, 2 would mean Range of Range of Range of Sequence. Anyway, in doing this I ran into a weird warning. If some_fn is as follows: struct weird_warning { template<typename Element, typename Slice> void operator()(Element &element, const Slice &slice) const { *boost::begin(slice[0]); // no warning slice[0][0]; // warning: operator[](outer) returning reference to temporary } }; ...I get warnings as indicated by the above comments. That is, *boost::begin(slice[0]) works just fine, but slice[0][0] issues a warning about the outer operator[] returning a reference to a temporary. I would be inclined to think that both of these should be legal operations (with no warnings being issued) - is that correct? If so, is there a problem in my use of range_ex, or is there a problem with range_ex? (the test file test_for_each_element_and_slice.hpp attached - the bits relevant to this warning are outlined by: //------------------------------------------------------------ //------------------------------------------------------------ ...relevant bits... //------------------------------------------------------------ //------------------------------------------------------------ ) I am using what I believe is the latest RangeEx from the vault (thanks for this great utility!) against boost trunk. Any help appreciated! Thanks, Stjepan
participants (1)
-
Stjepan Rajko