From: John Maddock (john_at_[hidden])
Date: 2005-10-16 06:39:30


> I've tried running some of the headers through the preprocessor,
> <iterator> looks like the smallest (but still much larger than
> <iosfwd> & <utility>). Although, <string> might be a better choice,
> as it's more likely to be included elsewhere.

Sigh, sadly no can do, they all end including one of the TR1 "poisoned"
headers (<memory> etc) eventually, and you end up with cyclic dependencies,
the problem is basically:

Boost.Config -> includes <string> (for example)
....
includes <memory> finds the TR1 version, which...

includes <boost/shared.hpp> which requires Boost.Config to have been fully
parsed already, but it's not, we're still in the middle of it!

There are other cyclic issues that are *much* worse than this, and I have a
nasty feeling I haven't found all of them yet.

It basically sucks, and I've been tearing my hair out over this, because I
also have a nasty suspicion that the TR1 headers will crash and burn if some
of the Boost headers are included first. Clearly that's not acceptable. I
think I have a solution that can be applied to Boost.Config and will let us
go back to using <utility> which has proved itself remarkably reliable, but
it's intrusive and can't really be applied to Boost as a whole.

So... I think I'm going with plan Z (the other 25 having been exhaused!),
and I'll revert the recent change, and go back to the drawing board...

John.