Subject: [boost] [fusion] sequence io manipulators
From: Jeff Flinn (Jeffrey.Flinn_at_[hidden])
Date: 2013-03-25 15:12:49


When streaming unrelated fusion sets to unrelated ostringstreams from
different threads, I get an invalid iterator error. This appears to be
due to using a boost::fusion::detail::stream_data::attach's local static
arena instance.

static void attach(Stream& stream, T const& data)
{
     static arena ar; // our arena
     ar.data.push_back(new T(data));
     stream.pword(get_xalloc_index<Tag>()) = ar.data.back();
}

I assume there are issues with using the unguarded stream_data::data
std::vector<T*> from multiple threads. This implementation looks
problematic in that the arena data does not get cleaned up until program
exit as well.

Jeff