AMDG On 01/26/2018 08:30 AM, Peter Dimov via Boost wrote:
As written, this does not allow the latter. The general case is:
// prefix.hpp:
#if defined(__cpp_foo) && __cpp_foo >= 201400 # define BOOST_CXX14_FOO #endif
// compiler/bar.hpp:
#if __BAR_VERSION__ >= 12 && __BAR_VERSION__ < 18 // have foo, don't have feature macros yet # define BOOST_CXX14_FOO #endif
#if __BAR_VERSION__ == 21 && __cplusplus >= 201700 // bar++ version 21 has a bug in foo in -std=c++17 mode # undef BOOST_CXX14_FOO #endif
If you define to 0 or 1 in prefix.hpp, the information of whether the user overrode is lost, and the compiler-specific config can still stomp over the user define.
Just apply the defaults after the compiler specific configuration instead of before, and there's no problem. In Christ, Steven Watanabe