Subject: Re: [boost] Removing support for old compilers
From: Peter Dimov (lists_at_[hidden])
Date: 2013-10-13 15:52:17
Stephen Kelly wrote:
> My changes amount to removal of definitions of some macros in
> boost/config, followed by removal of newly-dead code.
That's not quite true, Stephen.
Here are a few examples of changes that do not remove any dead code:
-#if defined(BOOST_NO_TEMPLATED_IOSTREAMS) || ( defined(__GNUC__) &&
(__GNUC__ < 3) )
+#if ( defined(__GNUC__) && (__GNUC__ < 3) )
-- -#elif defined( _MSC_VER ) && _MSC_VER >= 1310 +#elif defined( _MSC_VER ) -- -#if defined(_MSC_VER) && _MSC_VER >= 1310 && ( defined(_M_IX86) || defined(_M_X64) ) +#if defined(_MSC_VER) && ( defined(_M_IX86) || defined(_M_X64) ) -- -#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) ... -#endif -- -#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( BOOST_NO_SFINAE ) +#if !defined( BOOST_NO_SFINAE ) Now, you'd say that in some of these cases, this is just the first step of a process that will eventually result in the removal of dead code. Maybe so. But in the meantime, we're left with an #ifdef that makes much less sense than the original, which was generally self-documenting. When I see #if defined(BOOST_NO_TEMPLATED_IOSTREAMS) || ( defined(__GNUC__) && (__GNUC__ < 3) ) I know that the following is a workaround for the lack of templated iostreams, and that for some (admittedly lost in time) reason, g++ 2.x lacks templated iostreams but does not define the config macro. Without the first portion, this information is no longer present. Few people would object to actual removal of dead code sections such as #if defined(THIS) || defined(THAT) ... #endif when we know that neither THIS nor THAT will ever be defined (there are some rare exceptions to that). Fiddling with the ifdef conditions is another story.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk