Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Version 1.48.0

Version 1.48.0

November 15th, 2011 15:47 GMT




  • Locale Patch - Fixes a bug which causes boost::locale::utf::utf_traits to accept some invalid UTF-8 sequences, which is a possible security flaw.

New Libraries

  • Container: Standard library containers and extensions, from Ion GaztaƱaga.
  • Locale: Provide localization and Unicode handling tools for C++, from Artyom Beilis.
  • Move: Portable move semantics for C++03 and C++11 compilers, from Ion GaztaƱaga.

Updated Libraries

  • Asio:
    • Implemented various performance improvements, including:
      • Using thread-local operation queues in single-threaded use cases (i.e. when concurrency_hint is 1) to eliminate a lock/unlock pair.
      • Allowing some epoll_reactor speculative operations to be performed without holding the lock.
      • Improving locality of reference by performing an epoll_reactor's I/O operation immediately before the corresponding handler is called. Also improves scalability across CPUs.
      • Specialising asynchronous read and write operations for buffer sequences that are arrays (boost::array or std::array) of exactly two buffers.
    • Fixed compile error in regex overload of async_read_until (#5688).
    • Fixed Windows-specific compile error by explicitly specifying the signal() function from the global namespace (#5722).
    • Changed deadline_timer implementation to not read clock unless the timer heap is non-empty.
    • Changed SSL buffer sizes to be large enough to hold a complete TLS record (#5854).
    • Fixed synchronous null_buffers operations so that they obey the user's non-blocking setting (#5756).
    • Changed to set fd_set size at runtime when using Windows.
    • Disabled MSVC warning due to const qualifier being applied to function type.
    • Fixed crash that occurs when using Intel C++ compiler (#5763).
    • Changed OpenSSL initialisation to support all available algorithms.
    • Fixed SSL error mapping when session is gracefully shut down.
    • Added some latency test programs.
    • Clarified that a read operation ends when the buffer is full (#5999).
    • Fixed exception safety issue in epoll_reactor initialisation (#6006).
    • Made number of strand implementations configurable via BOOST_ASIO_STRAND_IMPLEMENTATIONS macro.
    • Added support for BOOST_ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION flag which switches strand allocation to use a round-robin approach rather than hashing.
    • Fixed potential strand starvation issue that can occur when is used.
  • Chrono:
    • #5979 Added chrono rounding utilities as defined by Howard Hinnant here.
    • #5978 Add BOOST_CHRONO_HAS_PROCESS_CLOCKS to know if process clocks are available.
    • #5998 Make possible to disable hybrid error handling.
    • #5906 Take in account the constexpr as defined in the standard.
    • #5907 Take in account noexcept for compilers supporting it.
    • Fixed some bugs.
    • See the History for more details.
  • Config:
    • Add BOOST_NO_DECLTYPE_N3276 config macro. (See N3276.)
  • Fusion:
    • Make single_view a random access fusion sequence.
    • Remove bogus compile-time asserts from fusion::distance.
    • Cleaner implementation of segmented Fusion.
  • Geometry:
    • Bugfixes:
      • Robustness issue, in some circumstances the union failed to output. Fixed.
      • Robustness issue, in some circumstances the calculated intersection point was outside the segment. Fixed.
      • Concept issue, cartesian intersect didn't understand segments other than the provided one. Fixed.
      • Sometimes self-intersections in linestrings were missed. Fixed.
      • The fusion coordinate system was not registered correctly. Fixed.
    • Solved tickets:
      • #5726 (Segment intersection algorithm still assumes 'first', 'second' members)
      • #5744 (mistake fusion adapt example)
      • #5748 (need include <boost/foreach.hpp>)
      • #5954 (distance_pythagoras skips sqrt() step)
    • Improvements on algorithms:
      • Checking self-intersections is now not done automatically, this can blast performance.
      • Besides that, checking self-intersections is made faster.
      • Intersections now avoid outputting duplicate points. So they output the minimal set.
    • Additional algorithms:
      • covered_by: within is defined as "within, not on boundary". covered_by is "within or on boundary"
    • Additional functionality:
      • within: strategies can now be specified for within<point, box> and within<box, box>
      • convert: a much broader range of conversions is supported
      • assign: idem, (currently partly) synonym for convert (but reversed arguments)
    • Additional coordinate types:
      • Basic support for Boost.Rational
  • Graph:
    • Fixed bugs #5185, #5506, #5813 and #5919.
    • Various other bug fixes not in Trac.
    • Changed edge_descriptor type for reverse_graph to a new data type to avoid ambiguities with the edge_descriptor of the underlying graph.
  • Interprocess:
    • Added support to customize offset_ptr and allow creating custom managed segments that might be shared between 32 and 64 bit processes.
    • Shared memory in windows has again filesystem lifetime: kernel bootstamp and WMI use to get a reliable timestamp was causing a lot of trouble.
  • Intrusive:
  • Lexical cast:
    • Added code to work with Inf and NaN values on any platform (#5689).
    • New Quickbook documentation (#5723).
    • Better performance and less memory usage for many combinations of Source and Target types.
    • Better performance for C locale.
  • Math:
    • Added new series evaluation methods to the cyclic Bessel I, J, K and Y functions. Also taken great care to avoid spurious over and underflow of these functions. Fixes issue #5560.
    • Added an example of using Inverse Chi-Squared distribution for Bayesian statistics, provided by Thomas Mang.
    • Added tests to use improved version of lexical_cast which handles C99 nonfinites without using global facets.
    • Corrected wrong out-of-bound uniform distribution CDF complement values #5733.
    • Enabled long double support on OpenBSD (issue #6014).
    • Changed nextafter and related functions to behave in the same way as other implementations - so that nextafter(+INF, 0) is a finite value (issue #5832).
    • Changed tuple include configuration to fix issue when using in conjunction with Boost.Tr1 (issue #5934).
    • Changed class eps_tolerance to behave correctly when both ends of the range are zero (issue #6001).
    • Fixed missing include guards on prime.hpp (issue #5927).
    • Removed unused/undocumented constants from constants.hpp (issue #5982).
    • Fixed missing std:: prefix in nonfinite_num_facets.hpp (issue #5914).
    • Minor patches for Cray compiler compatibility.
  • MSM:
    • eUML: added easier event reprocessing: process(event_) and reprocess()
    • Rewrite of internal transition tables. There were a few bugs (failing recursivity in internal transition tables of sub-sub machines) and a missing feature (unused internal transition table of the main state machine).
    • Bugfixes
      • Reverted favor_compile_time policy to Boost 1.46 state
      • none event now is convertible from any other event
      • eUML and pseudo exit states
      • Fixed not working Flag_AND
      • Fixed rare bugs causing multiple processing of the same event in a submachine whose transition table contains this event and a base event of it.
      • gcc warnings about unused variables
    • Breaking change: the new internal transition table feature causes a minor breaking change. In a submachine, the "Fsm" template parameter for guards / actions of an internal table declared using internal_transition_table now is the submachine, not the higher-level state machine. Internal transitions declared using internal rows in the higher-level state machine keep their behavior (the "Fsm" parameter is the higher-level state machine). To sum up, the internal transition "Fsm" parameter is the closest state machine containing this transition.
  • Numeric.Conversion:
  • Proto:
    • Breaking Change: Reduce numbers of operator overloads by using rvalue references on compilers that support them. Any user code that defines additional operator overloads on Proto expressions could potentially be rendered ambiguous by this change. The solution is to use a grammar to disable Proto's operators that are made ambiguous by any user-defined operators.
    • Move definitions of Proto tag types into an ADL-blocking namespace.
    • Add second template parameter to proto::siwtch_ to control dispatching to cases.
    • Allow dependent domains to be specified with BOOST_PROTO_EXTENDS and BOOST_PROTO_BASIC_EXTENDS.
  • Regex:
  • Spirit:
    • Spirit V2.5.1, see the 'What's New' section for details.
  • TypeTraits:
  • Unordered:
    • Improved support for the C++11 standard - breaking change to equality and emplace.
    • Use Boost.Move to implement move semantics.
    • See the change log for full details.
  • Wave:

Compilers Tested

Boost's primary test compilers are:

  • Linux:
    • LLVM Clang 2.8
    • GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.3, 4.5.1, 4.5.2, 4.6
    • GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.2
    • Intel 11.1
  • OS X:
    • Intel 11.1
    • GCC: 4.2.1, 4.4.4
    • GCC, C++0x mode: 4.4.4
  • Windows:
    • Visual C++ 8.0, 9.0, 10.0
    • GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.1
  • FreeBSD:
    • GCC 4.2.1, 32 and 64 bit.
  • QNX:
    • QCC 4.4.2
    • QCC, C++0x mode: 4.4.2, 4.6.1

Boost's additional test compilers include:

  • Linux:
    • Clang from subversion, with libc++ and GNU libstdc++
    • LLVM Clang 2.8 x
    • GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.4, 4.5.2, 4.5.4, 4.6.1, 4.6.2
    • GCC, C++0x mode: 4.3.4, 4.4.3, 4.4.4, 4.5.2
    • pgCC: 11.2 x
    • Intel: 10.1, 11.1, 12.0
    • PathScale: 4.0.8
    • Visual Age 10.1
  • OS X:
    • Clang from subversion, with libc++ and GNU libstdc++.
    • Intel 11.1.
    • GCC: 4.2.1, 4.4.4.
    • GCC, C++0x mode: 4.4.4.
  • Windows:
    • Visual C++ 8.0, 9.0, 10.0
    • Visual C++ with STLport: 9.0
    • Visual C++, Windows Mobile 5, with STLport: 9.0
    • GCC, mingw: 4.4.0, 4.4.7, 4.5.2, 4.5.4, 4.6.1
    • GCC, C++0x mode, mingw: 4.5.2
    • GCC, mingw 64-bit: 4.7.0
  • AIX:
    • IBM XL C/C++ Enterprise Edition, V11.1.0.0
  • FreeBSD:
    • GCC 4.2.1, 32 and 64 bit.
  • Solaris:
    • Sun 5.10


Beman Dawes, Eric Niebler, Rene Rivera, Daniel James and Vladimir Prus managed this release.