
I think pimpl should be used on by case basis, because it doesn't make sense in every library Boost has.
I agree, but I think that there should be policy that recommends doing that for relevant parts. Just like today: Boost recommends using Boost.Test framework but it is up to library developer to decide whether it would use it or not. For example: I do not expect from Boost.Function, Boost.Bind or Boost.Pheonix to separate implementation from interfaces. However libraries like Asio, Thread, Regex, Interprocess and many others should. I don't see any reason why, memory allocation algorithm of Interprocess should be in header libraries at all? If something requires templates for flexibility, it should be in headers, but if it does not? Put it in source library and never recompile, especially when these parts of code huge and non-trivial! Artyom