Boost C++ Libraries

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

Version 1.54.0

Version 1.54.0

July 1st, 2013 17:10 GMT

Documentation

Downloads
PlatformFile
unixboost_1_54_0.tar.bz2
boost_1_54_0.tar.gz
windowsboost_1_54_0.7z
boost_1_54_0.zip

Patches

These are patches from library authors which were found too late to be fixed in the 1.54.0 release. Be careful as they have not been through the normal testing process.

News

Supported CPUs

Boost no longer supports the 80386 target CPU, the minimum x86 32-bit target is i486. The 80386 target was not properly supported by Boost.SmartPtr and Boost.Atomic (as well as the libraries that used them internally) even before this release. Some Boost libraries may have higher requirements on the minimum target CPU (like Boost.Log for example), see the respective library documentation for details.

Also by default, when building Boost for x86 32-bit targets it will compile for i686 (Pentium Pro) and later CPUs. This can be changed by specifying the instruction-set property in b2 or bjam command line, for example:

b2 variant=release architecture=x86 instruction-set=i486 stage

Possible values for the instruction-set are:

  • Target for the host CPU: native
  • Generic x86 CPUs: i486, i586, i686
  • Intel CPUs: pentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium3m, pentium-m, pentium4, pentium4m, prescott, nocona, core2, corei7, corei7-avx, core-avx-i, conroe, conroe-xe, conroe-l, allendale, merom, merom-xe, kentsfield, kentsfield-xe, penryn, wolfdale, yorksfield, nehalem, sandy-bridge, ivy-bridge, haswell, atom
  • AMD CPUs: k6, k6-2, k6-3, athlon, athlon-tbird, athlon-4, athlon-xp, athlon-mp, k8, opteron, athlon64, athlon-fx, k8-sse3, opteron-sse3, athlon64-sse3, amdfam10, barcelona, bdver1, bdver2, bdver3, btver1, btver2
  • VIA CPUs: c3, c3-2
  • IDT CPUs: winchip-c6, winchip2

Note that not all these values may be supported by a particular compiler.

Signals deprecated

Boost.Signals is no longer being actively maintained, so it has been deprecated. Do not use Boost.Signals for new development (use Boost.Signals2 instead). If you have existing Boost.Signals-based code, it will continue to work, but consider moving to Boost.Signals2. There is a porting guide in the Signals2 documentation.

New Libraries

  • Log: Logging library, from Andrey Semashev.
  • TTI: Type Traits Introspection library, from Edward Diener.
  • Type Erasure: Runtime polymorphism based on concepts.

Updated Libraries

  • Accumulators:
    • Fixes comment typos (#7917)
    • Silence unused variable warnings (#6926)
  • Algorithm:
    • The return types for copy_while and copy_until have been changed. This is an interface change. If you were using the return values from these functions, then you will have to modify your code. Instead of just returning the modified OutputIterator, these functions now return a std::pair<InputIterator, OutputIterator>. If this change affects your code, the simplest change is to add a .second to the end of the call, which will get you the same behavior that you had before.
    • Added C++14 versions of 'is_permutation', 'equal' and 'mismatch'.
  • Any:
    • Added C++11 features support #6999:
      • Move assignment and move constructors.
      • Added noexcept modifiers.
  • Asio:
    • Added new traits classes, handler_type and async_result, that allow the customisation of the return type of an initiating function.
    • Added the asio::spawn() function, a high-level wrapper for running stackful coroutines, based on the Boost.Coroutine library. The spawn() function enables programs to implement asynchronous logic in a synchronous manner. For example: size_t n = my_socket.async_read_some(my_buffer, yield);.
    • Added the asio::use_future special value, which provides first-class support for returning a C++11 std::future from an asynchronous operation's initiating function. For example: future<size_t> n = my_socket.async_read_some(my_buffer, asio::use_future);.
    • Promoted the stackless coroutine class and macros to be part of Asio's documented interface, rather than part of the HTTP server 4 example.
    • Added a new handler hook called asio_handler_is_continuation. Asynchronous operations may represent a continuation of the asynchronous control flow associated with the current executing handler. The asio_handler_is_continuation hook can be customised to return true if this is the case, and Asio's implementation can use this knowledge to optimise scheduling of the new handler. To cover common cases, Asio customises the hook for strands, spawn() and composed asynchronous operations.
    • Added four new generic protocol classes, generic::datagram_protocol, generic::raw_protocol, generic::seq_packet_protocol and generic::stream_protocol, which implement the Protocol type requirements, but allow the user to specify the address family (e.g. AF_INET) and protocol type (e.g. IPPROTO_TCP) at runtime.
    • Added C++11 move constructors that allow the conversion of a socket (or acceptor) into a more generic type. For example, an ip::tcp::socket can be converted into a generic::stream_protocol::socket via move construction.
    • Extended the basic_socket_acceptor<> class's accept() and async_accept() functions to allow a new connection to be accepted directly into a socket of a more generic type. For example, an ip::tcp::acceptor can be used to accept into a generic::stream_protocol::socket object.
    • Moved existing examples into a C++03-specific directory, and added a new directory for C++11-specific examples. A limited subset of the C++03 examples have been converted to their C++11 equivalents.
    • Various SSL enhancements. Thanks go to Nick Jones, on whose work these changes are based.
      • Added support for SSL handshakes with re-use of data already read from the wire. New overloads of the ssl::stream<> class's handshake() and async_handshake() functions have been added. These accept a ConstBufferSequence to be used as initial input to the ssl engine for the handshake procedure.
      • Added support for creation of TLSv1.1 and TLSv1.2 ssl::context objects.
      • Added a set_verify_depth() function to the ssl::context and ssl::stream<> classes.
      • Added the ability to load SSL certificate and key data from memory buffers. New functions, add_certificate_authority(), use_certificate(), use_certificate_chain(), use_private_key(), use_rsa_private_key() and use_tmp_dh(), have been added to the ssl::context class.
      • Changed ssl::context to automatically disable SSL compression by default. To enable, use the new ssl::context::clear_options() function, as in my_context.clear_options(ssl::context::no_compression).
    • Fixed a potential deadlock in signal_set implementation.
    • Fixed an error in acceptor example in documentation #8421.
    • Fixed copy-paste errors in waitable timer documentation #8602.
    • Added assertions to satisfy some code analysis tools #7739.
    • Fixed a malformed #warning directive #7939.
    • Fixed a potential data race in the Linux epoll implementation.
    • Fixed a Windows-specific bug, where certain operations might generate an error_code with an invalid (i.e. NULL) error_category #8613.
    • Fixed basic_waitable_timer's underlying implementation so that it can handle any time_point value without overflowing the intermediate duration objects.
    • Fixed a problem with lost thread wakeups that can occur when making concurrent calls to run() and poll() on the same io_service object #8354.
    • Fixed implementation of asynchronous connect operation so that it can cope with spurious readiness notifications from the reactor #7961.
  • Chrono:
    • Fixed Bugs:
      • #8079 Chrono memory leak
      • #8318 BOOST_FORCEINLINE constructors of time_point and duration
      • #8367 chrono does not compile with clang from XCode 4.5.2 with -std=c++11 -stdlib=libc++ and -arch armv7
      • #8370 typo in chrono reference
      • #8435 Can't compile Chrono on HP-UX due to no CLOCK_REALTIME macro.
  • Circular Buffer:
    • Fixed warnings (#8032).
  • Container:
    • Added experimental static_vector class, based on Andrew Hundt's and Adam Wulkiewicz's high-performance varray class.
    • Speed improvements in vector constructors/copy/move/swap, dispatching to memcpy when possible.
    • Support for BOOST_NO_EXCEPTIONS #7227.
    • Fixed bugs #7921, #7969, #8118, #8294, #8553.
  • Context:
    • Support for SPARC architecture added.
  • Coroutine:
    • Support for segmented stacks (stack grows on demand) added.
    • #7805 Typo
    • #7972 GCC warnings
    • #7988 C++11 range-for
    • #8023 Using iterator traits
    • #8024 Create const_iterator
    • #8101 Postfix operator++ for iterator
    • #8526 memory leak
    • #8544 calling managed DLL
  • Geometry:
    • Additional functionality
      • added Spatial Index, developed for Boost.Geometry by Adam Wulkiewicz. The spatial index was originally started by Federico J. Fernandez during the Google Summer of Code 2008 program, mentored by Hartmut Kaiser.
      • added SVG-output, this was already in extensions for several years
    • Documentation
      • small fixes of missing words
    • Bugfixes
      • collinear opposite segments did sometimes (in circles) have a robustness issue, fixed
      • fixed insertion of false intersection point (found by buffer)
      • applied patch of Vladimir Petrovic for debugging traversals
    • Solved tickets
      • 7462 degenerate union result for float, fixed
      • 7465 wrong construtors access type in scale_transformer class, fixed
      • 7802 cart_intersect.hpp unused parameter warnings, fixed
      • 8254 faulty intersection, fixed
      • 8393 polygon model doesn't adhere to stated Polygon concept rules, doc updated.
      • 8403 silenced compiler warning C4127: conditional expression is constant
      • 8405 silenced compiler warning C4189: '...' : local variable is initialized but not referenced
    • Internal changes
      • Made several algorithms variant-aware (append, area, clear, convert, equals, length, num_points)
  • Graph:
    • Bugs fixed from Trac: #6780, #7016, #7155, #7845, #7863, #7877, #8166, #8192, #8398, #8411, #8427, #8428, #8434, #8490, #8681.
    • Added updates to VF2 subgraph isomorphism from Jakob Lykke Andersen and Flavio De Lorenzi.
    • Added maximum adjacency search from Fernando Vilas.
    • Added timeout support from Brammert Ottens to resource-constrained shortest paths (r_c_shortest_paths) algorithm.
    • Various fixes to documentation and examples and removal of outdated compiler workarounds.
  • Interprocess:
    • Added support for platform-specific flags to mapped_region (ticket #8030)
    • Fixed bugs #7484, #7598, #7682, #7923, #7924, #7928, #7936, #8521, #8595.
    • ABI breaking: Changed bootstamp function in Windows to use EventLog service start time as system bootup time. Previously used LastBootupTime from WMI was unstable with time synchronization and hibernation and unusable in practice. If you really need to obtain pre Boost 1.54 behaviour define BOOST_INTERPROCESS_BOOTSTAMP_IS_LASTBOOTUPTIME from command line or detail/workaround.hpp.
  • Intrusive:
    • Added BOOST_NO_EXCEPTIONS support (bug #7849).
  • Iostreams:
    • tee now works correctly for std::streams (#8315).
    • Documentation fixes (#8385, #8460).
    • Avoid warning from Clang's -Wimplicit-fallthrough (#8482).
  • Lexical cast:
    • Converting to character pointer now triggers compile time assert instead of runtime #8334.
    • Lexical cast is now capable of converting boost::int128_type and boost::uint128_type #7909.
    • Changed internal stream buffer handling, now works with libc++ #8267, #7704.
    • Restored getting address of lexical_cast function that was broken in 1.53.0 #7421.
    • Fixed warnings, internals and tests #2558, #7949, #8162, #8369, #8547.
  • Math:
    • Major reorganization to incorporate other Boost.Math like Integer Utilities (Greatest Common Divisor and Least Common Multiple), quaternions and octonions. Making new chapter headings.
    • Added many references to Boost.Multiprecision and cpp_dec_float_50 as an example of a User-defined Type (UDT).
    • Added Clang to list of supported compilers.
    • Fixed constants to use a thread-safe cache of computed values when used at arbitrary precision.
    • Added finding zeros of Bessel functions cyl_bessel_j_zero, cyl_neumann_zero, airy_ai_zeros and airy_bi_zeros(by Christopher Kormanyos).
    • More accuracy improvements to the Bessel J and Y functions from Rocco Romeo.
    • Fixed nasty cyclic dependency bug that caused some headers to not compile #7999.
    • Fixed bug in __tgamma that caused spurious overflow for arguments between 142.5 and 143.
    • Fixed bug in raise_rounding_error that caused it to return an incorrect result when throwing an exception is turned off #7905.
    • Added minimal __float128 support.
    • Fixed bug in edge-cases of poisson quantile #8308.
    • Adjusted heuristics used in Halley iteration to cope with inverting the incomplete beta in tricky regions where the derivative is flatlining. Example is computing the quantile of the Fisher F distribution for probabilities smaller than machine epsilon. See ticket #8314.
  • Meta State Machine:
    • Bugfix: Exit points broken for the favor_compile_time policy.
    • Bugfix: copy breaks exit points of subsubmachines.
    • Bugfix: #8046
  • Move:
  • Multiprecision:
    • Breaking change renamed rational_adapter to rational_adaptor.
    • Add support for MPFI.
    • Add logged_adaptor.
    • Add support for 128-bit floats via GCC's __float128 or Intel's _Quad data types.
    • Add support for user-defined literals in cpp_int, improve constexpr support.
    • Fixed bug in integer division of cpp_int that results in incorrect sign of cpp_int when both arguments are small enough to fit in a double_limb_type. See 8126.
    • Fixed bug in subtraction of a single limb in cpp_int that results in incorrect value when the result should have a 0 in the last limb: 8133.
    • Fixed bug in cpp_int where division of 0 by something doesn't get zero in the result: 8160.
    • Fixed bug in some transcendental functions that caused incorrect return values when variables are reused, for example with a = pow(a, b). See 8326.
  • Polygon:
    • Updates and fixes to the Voronoi documentation.
    • Bugs fixed from Trac: #8026, #8197, #8257.
  • PropertyMap:
    • Added compose_property_map from Guillaume Pinot.
  • Range:
    • Bug fixes:
      • #6944 Some Range concepts use the incorrect Iterator concept
      • #7407 istream_range does not compile with wcin
      • #7408 istream_range should not pull istream
      • #7731 irange doesn't end iteration properly when step_size is 3 or more
      • #7827 [range] cant compile r | indexed to range algorithm
      • #8338 Iterator range does not work with pointer to array as iterator
      • #8453 Incorrect configuration macro BOOST_NO_PARTIAL_TEMPLATE_SPECIALIZATION
  • Signals:
    • No longer actively maintained, so it is deprecated. Use Signals2 for new development.
  • Thread:
    • New Features:
      • #7285 C++11 compliance: Allow to pass movable arguments for call_once.
      • #7445 Async: Add future<>.then
      • #7449 Synchro: Add a synchronized value class
    • Fixed Bugs:
      • #4878 MinGW 4.5.0 undefined reference to bool interruptible_wait(detail::win32::handle handle_to_wait_for,detail::t imeout target_time).
      • #4882 Win32 shared_mutex does not handle timeouts correctly.
      • #5752 boost::call_once() is unreliable on some platforms
      • #6652 Boost.Thread shared_mutex.hpp:50:99: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
      • #6843 [Intel C++] Compile Errors with '#include <atomic>'
      • #6966 future boost::future_category inconsistent dll linkage
      • #7720 exception lock_error while intensive locking/unlocking of mutex
      • #7755 Thread: deadlock with shared_mutex on Windows
      • #7980 Build error: msvc-11.0 and BOOST_THREAD_DONT_USE_DATETIME
      • #7982 pthread_delay_np() parm compile error on AIX
      • #8027 thread library fails to compile with Visual Studio 2003
      • #8070 prefer GetTickCount64 over GetTickCount
      • #8136 boost::this_thread::sleep_for() sleeps longer than it should in Windows
      • #8212 Boost thread compilation error on Solaris 10
      • #8237 fix documentation for 'thread_group'
      • #8239 barrier::wait() not marked as interruption_point
      • #8323 boost::thread::try_join_for/try_join_until may block indefinitely due to a combination of problems in Boost.Thread and Boost.Chrono
      • #8337 The internal representation of "std::string(this->code()->message())" escapes, but is destroyed when it exits scope.
      • #8371 C++11 once_flag enabled when constexpr is not available
      • #8443 Header file inclusion order may cause crashes
      • #8451 Missing documented function 'boost::scoped_thread::joinable'
      • #8530 [Coverity] Unused variable thread_handle, uninitialized variable cond_mutex in thread/pthread/thread_data.hpp
      • #8596 With C++0x enabled, boost::packaged_task stores a reference to function objects, instead of a copy.
  • Type Traits:
    • New type traits implemented #8189:
      • is_nothrow_move_constructible
      • is_nothrow_move_assignable
      • has_trivial_move_assign
      • has_trivial_move_constructor
  • uBLAS:
    • #6511 Division by scalar should use enable_if<>
    • #7297 Make the free functions 'num_columns' and 'num_rows' support the uBLAS traits system and better work with expression types
    • #6010 fixed linkage problems in assignment.hpp
    • updated doc
  • Unordered:
    • Some very basic noexcept support.
  • Utility:
    • Fix basic_string_ref::find (#8067).
    • Fix string_ref's logical operators.
    • Update noncopyable for C++11 (#6578).
    • Fix noncopyable compiler warning when used in DLL interface (#6935).
    • Fix using boost::addressof with boost::function on SolarisStudio compiler (#7079).
    • Disable annoying MSVC warning about operator comma (#7663)
  • Variant:
    • Now uses new type traits from Boost.TypeTrait to detect noexcept constructors and assignment operators #8296. This shall increase performance of boost::variant for many types in C++11.
    • Multivisitation implemented #8459.
    • Documentation updated to reflect C++11 features support.
  • Wave:
  • xpressive:
    • Remove unused variables, fixes #8039
    • Avoid name clash with macro None in glx.h, fixes #8204
    • Silence a gcc warning, fixes #8138

Compilers Tested

Boost's primary test compilers are:

  • Linux:
    • GCC: 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.3
    • GCC, C++98 mode: 4.7.3
    • GCC, C++11 mode: 4.7.2, 4.7.3, 4.8.0
    • Clang: 3.0, 3.1, 3.2
    • Clang, C++11 mode: 3.2
  • OS X:
    • GCC: 4.2
    • Apple Clang: 4.2.1
    • Apple Clang, C++11 mode: 4.2.1
  • Windows:
    • GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.2, 4.8.0
    • Visual C++: 8.0, 9.0, 10.0, 11.0
  • FreeBSD:
    • GCC: 4.2.1

Boost's additional test compilers include:

  • Linux:
    • Clang: 3.0, 3.1, 3.2, from Subversion
    • Clang, with libc++: 3.2
    • GCC: 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.2, 4.7.3
    • GCC, C++98 mode: 4.7.3
    • GCC, C++11 mode: 4.7.3, 4.8.0
  • OS X:
    • Apple Clang: 4.2.1
    • Apple Clang, C++11 mode: 4.2.1
    • Clang: from Subversion
    • Clang, C++11 mode: from Subversion
    • GCC: 4.2
  • Windows:
    • GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.2, 4.8.0
    • Visual C++: 9.0, 10.0, 11.0
    • Visual C++, Windows Mobile 5, with STLport: 9.0
  • AIX:
    • IBM XL C/C++ Enterprise Edition: 12.1.0.1
  • FreeBSD:
    • GCC: 4.2.1

Acknowledgements

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