
The more dependencies you introduce, the more fragile your code becomes, but there's a great deal of benefit to reuse, too. The only issue in this case is that one can reasonably expect a top-level header to avoid dependencies on libraries.
Personally I wouldn't say it's the only issue. But I'm glad we can agree that it's its a BIG issue.
There are a lot of headers violating your rule. What problems has it caused?
I suspect that's true. Here's another point then - if the two small headers of Boost.Exception upon which throw_exception depends were moved into boost/detail/ - would that make you happier? I don't see it makes any difference myself: other perhaps than making a declaration that these are and will remain lightweight includes, and won't suddenly dump a whole bunch of other Boost.Exception code into your files. John.