Boost logo

Boost :

Subject: Re: [boost] c++03 library survey
From: John Maddock (jz.maddock_at_[hidden])
Date: 2018-08-28 17:36:20

> - Which library/ies are you maintaining? (I assume this isn't some
> sort of private information - otherwise ignore the question)

Too many ;)

Math, Multiprecision, Regex, Type_traits, Config

> - Would you like to unconditionally use c++11 features if you would
> not have to worry about this breaking boost internal users?

Multiprecision: Builds with 03, but already makes fairly heavy C++11
use, and C++11 or later is really required for full functionality. C++03
support requires little maintenance other than some #ifdef's for rvalue
refs etc.  Fairly heavy use of noexcept is also used, but IMO this is an
untestable abomination anyway.  Generalised constexpr in C++14 is more
useful than C++11, along with really robust SFINAE and enable_if support
(in theory this is C++11-ish, but there are many early C++11 compilers
which choke on the code, along with more recent C++03 compilers which
handle things fine).

Math: historically needs nothing that isn't in C++03.  Constexpr support
has been gradually added to parts of the library, but is easy to
macro-ise around.  Recently, some new components have been added which
are more like C++14 as they really need generalised lambdas to work
well.  The nicest feature to have would be constexpr-if, but that's C++17.

TypeTraits: All the old C++98 cruft is still there, I don't intend to
ever change it, and if someone files a bug against say VC7.1, the answer
will be "upgrade your compiler".  There are C++11,14 and 17 isms
throughout added to support newer features in new compilers. Many traits
only work correctly post C++11.  The whole thing could probably be
greatly simplified post C++11, but I don't see much gain from going
through and ripping out the old code.  For folks that want to read the
source, I try to keep the "modern"/conforming implementation first in
the file, at least in new code.

Regex: was obviously designed when C++98 was still being formulated ;) 
Rvalue refs are the only C++11 feature that's nice to have, other things
like C++17's string_view support will gradually get added in time no doubt.

> - Would you like to unconditionally use c++11 features if you would
> not have to worry about this breaking any users?

Not especially, though I dare say I would just to save a few #ifdef's in
new code.

> - Would you deprecate your library completely if there were no
> boost-internal users and your current dependencies required
> c++11 (e.g. because your library has been merged into the c++11
> standard library anyway)

No.  While regex is in the std, I believe Boost.Regex continues to offer
useful enhancements.
Type_traits is an interesting one - if people stop using it, then
deprecation might be an option.

> - Are you yourself using any boost library (in an up-to-date version)
> in a c++03, non-boost project?

> - Do you have any Idea if the latest versions of your library is
> used by any important/significant number of c++02 projects?
> [It is only important if *you* consider those projects important
> and or the number significant]

No.  Generally I get more bug reports relating to very recent C++
versions that I haven't quite caught up with yet.  Of course these are
mature libraries, so the C++03 side of things should be pretty stable.

HTH, John.

This email has been checked for viruses by Avast antivirus software.

Boost list run by bdawes at, gregod at, cpdaniel at, john at