Boost logo

Boost :

Subject: Re: [boost] C++03 / C++11 compatibility question for compiled libraries
From: Edward Diener (eldiener_at_[hidden])
Date: 2018-02-08 17:06:59


On 2/8/2018 10:48 AM, Peter Dimov via Boost wrote:
> Edward Diener wrote:
>
>> I discuss a solution for this in the documentation topic "Use in a
>> non-header only library".
>
> lib MyLib : MyHeader.cpp : <define>CXXD_ARRAY_USE_BOOST
> <define>CXXD_FUNCTION_USE_BOOST <define>CXXD_REGEX_USE_BOOST
> <define>CXXD_TUPLE_USE_BOOST <define>MYLIB_BEING_BUILT ;
> lib MyLib_std : MyHeader.cpp : <define>CXXD_ARRAY_USE_STD
> <define>CXXD_FUNCTION_USE_STD <define>CXXD_REGEX_USE_STD
> <define>CXXD_TUPLE_USE_STD <define>MYLIB_BEING_BUILT ;
> lib MyLib_ar_fn_rx : MyHeader.cpp : <define>CXXD_ARRAY_USE_STD
> <define>CXXD_FUNCTION_USE_STD <define>CXXD_REGEX_USE_STD
> <define>CXXD_TUPLE_USE_BOOST <define>MYLIB_BEING_BUILT ;
> lib MyLib_ar_fn_tp : MyHeader.cpp : <define>CXXD_ARRAY_USE_STD
> <define>CXXD_FUNCTION_USE_STD <define>CXXD_REGEX_USE_BOOST
> <define>CXXD_TUPLE_USE_STD <define>MYLIB_BEING_BUILT ;
> lib MyLib_ar_fn : MyHeader.cpp : <define>CXXD_ARRAY_USE_STD
> <define>CXXD_FUNCTION_USE_STD <define>CXXD_REGEX_USE_BOOST
> <define>CXXD_TUPLE_USE_BOOST <define>MYLIB_BEING_BUILT ;
> lib MyLib_ar_rx_tp : MyHeader.cpp : <define>CXXD_ARRAY_USE_STD
> <define>CXXD_FUNCTION_USE_BOOST <define>CXXD_REGEX_USE_STD
> <define>CXXD_TUPLE_USE_STD <define>MYLIB_BEING_BUILT ;
> lib MyLib_ar_rx : MyHeader.cpp : <define>CXXD_ARRAY_USE_STD
> <define>CXXD_FUNCTION_USE_BOOST <define>CXXD_REGEX_USE_STD
> <define>CXXD_TUPLE_USE_BOOST <define>MYLIB_BEING_BUILT ;
> lib MyLib_ar_tp : MyHeader.cpp : <define>CXXD_ARRAY_USE_STD
> <define>CXXD_FUNCTION_USE_BOOST <define>CXXD_REGEX_USE_BOOST
> <define>CXXD_TUPLE_USE_STD <define>MYLIB_BEING_BUILT ;
> lib MyLib_ar : MyHeader.cpp : <define>CXXD_ARRAY_USE_STD
> <define>CXXD_FUNCTION_USE_BOOST <define>CXXD_REGEX_USE_BOOST
> <define>CXXD_TUPLE_USE_BOOST <define>MYLIB_BEING_BUILT ;
> lib MyLib_fn_rx_tp : MyHeader.cpp : <define>CXXD_ARRAY_USE_BOOST
> <define>CXXD_FUNCTION_USE_STD <define>CXXD_REGEX_USE_STD
> <define>CXXD_TUPLE_USE_STD <define>MYLIB_BEING_BUILT ;
> lib MyLib_fn_rx : MyHeader.cpp : <define>CXXD_ARRAY_USE_BOOST
> <define>CXXD_FUNCTION_USE_STD <define>CXXD_REGEX_USE_STD
> <define>CXXD_TUPLE_USE_BOOST <define>MYLIB_BEING_BUILT ;
> lib MyLib_fn_tp : MyHeader.cpp : <define>CXXD_ARRAY_USE_BOOST
> <define>CXXD_FUNCTION_USE_STD <define>CXXD_REGEX_USE_BOOST
> <define>CXXD_TUPLE_USE_STD <define>MYLIB_BEING_BUILT ;
> lib MyLib_fn : MyHeader.cpp : <define>CXXD_ARRAY_USE_BOOST
> <define>CXXD_FUNCTION_USE_STD <define>CXXD_REGEX_USE_BOOST
> <define>CXXD_TUPLE_USE_BOOST <define>MYLIB_BEING_BUILT ;
> lib MyLib_rx_tp : MyHeader.cpp : <define>CXXD_ARRAY_USE_BOOST
> <define>CXXD_FUNCTION_USE_BOOST <define>CXXD_REGEX_USE_STD
> <define>CXXD_TUPLE_USE_STD <define>MYLIB_BEING_BUILT ;
> lib MyLib_rx : MyHeader.cpp : <define>CXXD_ARRAY_USE_BOOST
> <define>CXXD_FUNCTION_USE_BOOST <define>CXXD_REGEX_USE_STD
> <define>CXXD_TUPLE_USE_BOOST <define>MYLIB_BEING_BUILT ;
> lib MyLib_tp : MyHeader.cpp : <define>CXXD_ARRAY_USE_BOOST
> <define>CXXD_FUNCTION_USE_BOOST <define>CXXD_REGEX_USE_BOOST
> <define>CXXD_TUPLE_USE_STD <define>MYLIB_BEING_BUILT ;
>
> This probably gives you an idea why one might prefer to always use the
> Boost components instead.

As discussed in the doc to the CXX Dual library you do not have to
choose to allow all possible variations, depending on how many different
CXXD mods you decide to use. You could decide that if C++11 on up is
being used your name is some 'xxx_std' while if C++11 on up is not being
used your name is 'xxx', and therefore you have two naming variants. Of
course this assumes your non-header only library only supports compilers
which in C++11 mode on up offers C++11 libraries for what you are using
in your library. But how many modern compilers do not support C++11
libraries properly in C++11 mode on up, and would you really want to
support such libraries that do not.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk