On 31 Mar 2015 at 20:38, Andrey Semashev wrote:
What I'd like to see is a solution for Boost.ASIO, as well as other header- only libraries that support ABI-breaking config options. Ideally, there should be a guideline for future libraries.
That's exactly BindLib. A python script it supplies will stamp out the ABI versioning preprocessor metaprogramming for all the config options which affect ABI. The preprocessor metaprogramming then assembles the appropriate inline namespacing. The clang AST parser program spits out the appropriate template aliasing. It all comes together surprisingly well. I have a unit test for AFIO which configures two extremely ABI incompatible copies of AFIO (one entirely STL11 based, the other entirely Boost based) in the same translation unit and it executes both sets of unit tests. Takes about seven minutes to compile, but all unit tests pass green on all platforms.
As for Boost.Log case, well, I'm still uncertain, but leaning towards dropping Boost.ASIO and writing my own network compatibility layer.
Before doing that I'd search for a header only lightweight C++ (or C) sockets platform abstraction library. I believe there is more than one available.
BTW Boost.ASIO lags standalone ASIO by up to a year.
This is very unfortunate.
Boost.ASIO is the ultra stable edition. Bug fixes are cherry picked into Boost.ASIO where easy to do so. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/