
AMDG Zeljko Vrba wrote:
Anyway, I've figured out how to define operator< for fusion::pairs, so I'm going down that route.
I would generally advise using a custom predicate rather than adding to fusion's namespace. struct compare_fusion_pair_second { template<typename T> bool operator()(bf::pair<T, unsigned> a, bf::pair<T, unsigned> b) const { return a.second < b.second; } }; //... std::sort(v.begin(), v.end(), compare_fusion_pair_second());
But I'm curious about the anomalous std::sort behavior. Why doesn't sort actually sort the std::vector (search for line marked XXX:)? Should I watch out for more similar pitfalls?
typedef bf::transform_view<Map, Map2Pair> Pair;
Pair tx(Map m) { return Pair(m, Map2Pair()); }
A transform_view stores a reference to the underlying sequence. In this case, the underlying sequence immediately goes out of scope and the transform_view is left with a dangling reference. Try this. Pair tx(Map& m) { return Pair(m, Map2Pair()); } In Christ, Steven Watanabe