Antony Polukhin wrote:
My alternative idea of "nice to have" is a single Boost library that can use either boost or std components in its interface. That's not always possible to obtain though.
I've tried that and it kind of works. There are still problems: * users have to use macro to customize the library * bcp still pulls in the Boost alternatives * code redability suffers from typedefs * you still kind of have two different libraries
Here's how it works on Boost.DLL: * users define BOOST_DLL_USE_STD_FS * bcp still puls in Boost.Filesystem, Boost.System... * boost::dll::fs::path = std::conditional_t<a-lot-of-mess> * code in incompatible with the library that was build without BOOST_DLL_USE_STD_FS
That's not what I have in mind. Macros don't solve the problem. What I have in mind is that there is a single library that, in its interface, can seamlessly take either boost::fs::path or std::fs::path, without the user having to define anything. Of course, when building the library, you probably would need to have Boost.Filesystem available.