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.55.0

Version 1.55.0

November 11th, 2013 19:50 GMT

Documentation

Downloads
PlatformFile
unixboost_1_55_0.tar.bz2
boost_1_55_0.tar.gz
windowsboost_1_55_0.7z
boost_1_55_0.zip

Other Downloads

News

Support was removed from Config for some very old versions of compilers. The new minimum requirements are:

  • Digitial Mars 8.41
  • GCC 3.3
  • Intel 6.0
  • Visual C++ 7.1

Note: This is just the mininimum requirements for Config. Some Boost libraries may have higher mininimum requirements and not support all platforms or compilers.

Other compilers are currently unchanged, but we are considering removing support for some other old compilers. Candidates for removal are:

  • Metroworks C++ (i.e. codewarrior)
  • SunPro 5.7 and earlier
  • Borland C++ Builder 2006 (5.82) and earlier

If you're using any of these, please let us know on the mailing lists. We will take into account any feedback received before making a decision.

Known Bugs with Visual Studio 2013/Visual C++ 12

Visual Studio 2013 was released quite late in the release process, so there exist several unresolved issues. These include:

  • Serialization can't compile because of a missing include.
  • Using has_member_function_callable_with from Boost.Container's allocator_traits causes a compile error (#9332).
  • In libraries such as Unordered and MultiIndex, calling overloaded functions with initializer lists can result in a compile error, with Visual C++ claiming that the overloads are ambiguous. This is a Visual C++ bug and it isn't clear if there's a good workaround. This won't affect code that doesn't use initializer lists, or uses an initializer list that doesn't require an implicit conversion (i.e. an initializer list of the container's exact value type).
  • Thread: ex_scoped_thread compile fails (#9333).

Patches

  1. Log patch: fixes incorrect output of the dump manipulator, when used on AVX2-enabled CPU (e.g. Intel Haswell).

New Libraries

  • Predef: This library defines a set of compiler, architecture, operating system, library, and other version numbers from the information it can gather of C, C++, Objective C, and Objective C++ predefined macros or those defined in generally available headers, from Rene Rivera.

Updated Libraries

  • Accumulators:
    • #7915 Fix silly typos.
    • #8850 Fix MSVC warnings.
    • #8262 Rename average to fdiv.
  • Any:
    • boost::bad_any_cast exception is now visible across modules #8751.
    • Added clear() member function.
    • Added missing BOOST_NOEXCEPT.
    • Fixed issue with const rvalues #9215.
  • Asio:
    • Implemented a limited port to Windows Runtime. This support requires that the language extensions be enabled. Due to the restricted facilities exposed by the Windows Runtime API, the port also comes with the following caveats:
      • The core facilities such as the io_service, strand, buffers, composed operations, timers, etc., should all work as normal.
      • For sockets, only client-side TCP is supported.
      • Explicit binding of a client-side TCP socket is not supported.
      • The cancel() function is not supported for sockets. Asynchronous operations may only be cancelled by closing the socket.
      • Operations that use null_buffers are not supported.
      • Only tcp::no_delay and socket_base::keep_alive options are supported.
      • Resolvers do not support service names, only numbers. I.e. you must use "80" rather than "http".
      • Most resolver query flags have no effect.
    • Fixed a regression (introduced in Boost 1.54) where, on some platforms, errors from async_connect were not correctly propagated through to the completion handler (#8795).
    • Fixed a Windows-specific regression (introduced in Boost 1.54) that occurs when multiple threads are running an io_service. When the bug occurs, the result of an asynchronous operation (error and bytes transferred) is incorrectly discarded and zero values used instead. For TCP sockets this results in spurious end-of-file notifications (#8933).
    • Fixed a bug in handler tracking, where it was not correctly printing out some handler IDs (#8808).
    • Fixed the comparison used to test for successful synchronous accept operations so that it works correctly with unsigned socket descriptors (#8752).
    • Ensured the signal number is correctly passed to the completion handler when starting an async_wait on a signal that is already raised (#8738).
    • Suppressed a g++ 4.8+ warning about unused typedefs (#8980).
    • Enabled the move optimisation for handlers that use the default invocation hook (#8624).
    • Clarified that programs must not issue overlapping async_write_at operations (#8669).
    • Changed the Windows HANDLE backend to treat ERROR_MORE_DATA as a non-fatal error when returned by GetOverlappedResult for a synchronous read (#8722).
    • Visual C++ language extensions use generic as a keyword. Added a workaround that renames the namespace to cpp_generic when those language extensions are in effect.
    • Fixed some asynchronous operations that missed out on getting async_result support in Boost 1.54. In particular, the buffered stream templates have been updated so that they adhere to current handler patterns (#9000, #9001).
    • Enabled move support for Microsoft Visual Studio 2012 (#8959).
    • Added use_future support for Microsoft Visual Studio 2012.
    • Removed a use of std::min in the Windows IOCP backend to avoid a dependency on the <algorithm> header (#8758).
    • Eliminated some unnecessary handler copies.
    • Fixed various minor and cosmetic issues in code and documentation (including #8347, #8950, #8953, #8965, #8997).
  • Atomic:
    • Added support for 64-bit atomic operations on x86 target for GCC, MSVC and compatible compilers. The support is enabled when it is known at compile time that the target CPU supports required instructions.
    • Added support for 128-bit atomic operations on x86-64 target for GCC and compatible compilers. The support is enabled when it is known at compile time that the target CPU supports required instructions. The support can be tested for with the new BOOST_ATOMIC_INT128_LOCK_FREE macro.
    • Added a more efficient implementation of atomic<> based on GCC __atomic* intrinsics available since GCC 4.7.
    • Added support for more ARM v7 CPUs, improved detection of Thumb 2.
    • Added support for x32 (i.e. 64-bit x86 with 32-bit pointers) target on GCC and compatible compilers.
    • Removed dependency on Boost.Thread.
    • Internal lock pool now includes proper padding and alignment to avoid false sharing.
    • Fixed compilation with Intel compiler on Windows. Removed internal macro duplication when compiled on Windows.
    • Some code refactoring to use C++11 features when available.
  • Chrono:
    • Fixed Bugs:
      • #7868 chrono_io parses time incorrectly (1.53 and 1.52)
      • #9028 Typo in boost/chrono/stopwatches/formatters/base_formatter.hpp
      • #9147 uninitialized std::tm
  • Circular Buffer:
    • Added support for rvalue references and rvalue references emulation using Boost.Move. Values are moved only if value type has noexcept move constructor and noexcept move assignment operator #7888. Now Circular Buffer is usable with move-only types.
    • Much better documentation.
    • #5362 circular_buffer does not compile with BOOST_NO_EXCEPTIONS.
    • #7025 circular buffer reports warning: " type qualifiers ignored on function return type" while compile.
    • #7950 Eliminate W4-warnings under VS2005 - warning C4913: user defined binary operator ',' exists but no overload could convert all operands, default built-in binary operator ',' used.
  • Config:
    • Breaking change: Removed support for some older compilers. The new minimum compiler versions are:
      • Digitial Mars 8.41
      • GCC 3.3
      • Intel 6.0
      • Visual C++ 7.1
      Other compilers are unchanged.
  • Container:
  • Context:
  • Coroutine:
    • New interface (unidirectional data transfer).
    • #8782 no best alternative
    • #8801 auto-linking
  • Filesystem:
    • Fixed Android compilation #8706.
  • Fusion:
    • #8759 specialization of convert_impl for map_tag
  • Geometry:
    • Additional functionality
      • Added centroid for segment type
      • Added intersects() and disjoints() for Segment-Box and Linestring-Box
      • Added rtree creation using packing algorithm
      • Added contains() and covers() spatial query predicates
      • Added iterative queries
    • Bugfixes
      • In some cases .back() or .clear() was called, violating the usage of Concepts. Fixed for the reported cases
    • Solved tickets
      • 6958 Intersection generates self-intersection. Caused by spike, fixed
      • 8364 Invalid input exception, caused by spikes in previous steps, fixed
      • 8365 Invalid input exception, caused by spikes in previous steps, fixed
      • 8969 boost::geometry::model::point single argument constructor should be explicit
      • 8825 Patch adding member variable documentation to doxygen_xml2qbk
      • 8652 Intersection fails for triangle-triangle intersection. Caused by spike, fixed
      • 9047 Boost files that include themselves (strategies/intersection.hpp), fixed
  • Graph:
    • void is no longer allowed as a bundled property type (for example, in the VertexProperties template parameters to graph types); it did not work reliably before, but a static assertion now forbids it entirely. Use boost::no_property instead.
    • Added support for finish_edge visitor event point in depth-first search; the change should be backward-compatible with visitors that do not have that member function.
    • Disabled building of tests on Sun compiler.
    • Multiple source vertices are supported in non-named-parameter versions of breadth_first_visit, breadth_first_search, dijkstra_shortest_paths, and dijkstra_shortest_paths_no_init. This feature is not yet documented; to use it, replace the single parameter for the source vertex in each of these functions by two input iterators of the same type containing the source vertices to use.
    • Added Hawick circuits algorithm; contributed by Louis Dionne.
    • Added edge coloring algorithm; contributed by Maciej Piechotka.
    • Added min-cost max-flow algorithm; contributed by Piotr Wygocki.
    • Bugs and feature requests from Trac fixed: #5269, #8317, #8433, #8791, #8877, #8986, #9012, #9080.
  • Hash:
    • Simplify a SFINAE check so that it will hopefully work on Sun 5.9 (#8822).
    • Suppress Visual C++ infinite loop warning (#8568).
  • Intrusive:
    • Source breaking: Deprecated xxx_dont_splay functions from splay containers. Deprecated splay_set_hook from splay containers, use bs_set_hook instead. Both will be removed in Boost 1.56.
    • ABI breaking: Hash containers' end iterator was implemented pointing to one-past the end of the bucket array (see #8698) causing severe bugs when values to be inserted where allocated next to the bucket array. End iterator implementation was changed to point to the beginning of the bucket array.
    • Big refactoring in order to reduce template and debug symbol bloat. Test object files have been slashed to half in MSVC compilers in Debug mode. Toolchains without Identical COMDAT Folding (ICF) should notice size improvements.
    • Implemented SCARY iterators.
  • Lexical cast:
    • std::bad_alloc exceptions are now are not converted to boost::bad_lexical_cast #8966.
    • Added static assert that checks for std::numeric_limits specializations if they are required for conversion. Use BOOST_HAS_INT128 for detecting 128 bit integers support #8790.
    • Documentation improved and more usage examples added.
  • Log:
    • General changes:
      • Added a new configuration macro BOOST_LOG_WITHOUT_DEFAULT_FACTORIES. By defining this macro the user can disable compilation of the default filter and formatter factories used by settings parsers. This can substantially reduce binary sizes while still retaining support for settings parsers.
      • Rewritten some of the parsers to reduce the compiled binary size. The rewritten parsers are more robust in detecting ambiguous and incorrect input.
      • The following headers are deprecated: boost/log/utility/intrusive_ref_counter.hpp, boost/log/utility/explicit_operator_bool.hpp, boost/log/utility/empty_deleter.hpp. These headers will be removed in future releases. The contents of these headers were moved to other libraries.
    • Bug fixes:
      • Fixed timer attribute generating incorrect time readings on Windows on heavy thread contention when QueryPerformanceCounter API was used.
      • Fixed a bug in the filter parser that prevented using parsed filters with some attributes.
      • Fixed thread id formatting discrepancies between the default sink and formatters.
      • Closed tickets: #8815, #8819, #8915, #8917, #9139, #9140, #9153, #9155.
    • See changelog for more details.
  • Math:
    • Suppress numerous warnings (mostly from GCC-4.8 and MSVC) #8384, #8855, #9107, #9109..
    • Fixed PGI compilation issue #8333.
    • Fixed PGI constant value initialization issue that caused erf to generate incorrect results #8621.
    • Prevent macro expansion of some C99 macros that are also C++ functions #8732 and #8733..
    • Fixed Student's T distribution to behave correctly with huge degrees of freedom (larger than the largest representable integer) #8837.
    • Make some core functions usable with long double even when the platform has no standard library long double support #8940.
    • Fix error handling of distributions to catch invalid scale and location parameters when the random variable is infinite #9042 and #9126.
    • Add workaround for broken <tuple> in Intel C++ 14 #9087.
    • Improve consistency of argument reduction in the elliptic integrals #9104.
    • Fix bug in inverse incomplete beta that results in cancellation errors when the beta function is really an arcsine or Student's T distribution.
    • Fix issue in Bessel I and K function continued fractions that causes spurious over/underflow.
    • Add improvement to non-central chi squared distribution quantile due to Thomas Luu.
  • Move:
  • Meta State Machine:
    • New feature: interrupt states now support a sequence of events to end the interruption.
    • Fixed Trac #8686.
  • Multiprecision:
    • Added support for Boost.Serialization.
    • Suppressed some GCC warnings. See 8872.
    • Fixed bug in pow for large integer arguments. See 8809.
    • Fixed bug in pow for calculation of 0[super N]. See 8798.
    • Fixed bug in fixed precision cpp_int IO code that causes conversion to string to fail when the bit count is very small (less than CHAR_BIT). See 8745.
    • Fixed bug in cpp_int that causes left shift to fail when a fixed precision type would overflow. See 8741.
    • Fixed some cosmetic warnings from cpp_int. See 8748.
    • Fixed calls to functions which are required to be macros in C99. See 8732.
    • Fixed bug that causes construction from INT_MIN, LONG_MIN etc to fail in cpp_int. See 8711.
  • Multi-index Containers:
  • MPI:
    • Replaced calls to deprecated MPI functions
    • Added support for multi-threaded initialization
    • Added in-place collectives
  • Phoenix:
    • #9049 phoenix::function constructor is constexpr.
  • Polygon:
    • Updated CGAL part of the Voronoi benchmark with patches from Sebastien Loriot. Updated documentation.
    • Added polygon decomposition capability to polygon_90_set_data container (patch from Intel). Updated documentation.
    • Bugs fixed from Trac: #8197.
  • PropertyMap:
    • dynamic_properties objects can now be built by non-destructively chaining .property(name, pm) calls. Example:
      boost::dynamic_properties()
        .property("color", color_map)
        .property("pos", position_map)
      
    • The use of raw pointers as property maps is deprecated; it often failed on Visual Studio in the past. This usage has been removed from all tests and examples in Boost.Graph. The replacement to use for vertex properties in graphs (the most common use for this feature) is:
      boost::make_iterator_property_map(
        <pointer or container .begin() iterator>,
        get(boost::vertex_index, <graph object>))
      
      (Note: the lack of namespace qualification on get() in this code is necessary for generic code). Outside a graph context, the closest equivalent is:
      boost::make_iterator_property_map(
        <pointer>,
        boost::typed_identity_property_map<std::size_t>())
      
      There are commented-out static assertions on lines 151 and 159 of <boost/property_map/property_map.hpp> that can be un-commented to find deprecated uses of pointers in user code.
  • Rational:
    • Added lowest and max_digits10, members of std::numeric_limits added in C++11, to the unit-test code. Needed since Boost.Test refers to one of them when compiled in C++11 mode.
    • Changed initialization of some internal variables to something that cannot be a narrowing conversion, which fixes issue #5855. Needed since narrowing conversions are an error in C++11.
  • SmartPtr:
    • Added boost/smart_ptr/intrusive_ref_counter.hpp header, extracted from Boost.Log. The header implements a mixin base class that adds support for intrusive_ptr to user's classes.
  • Thread:
    • New Features:
      • #8519 Synchro: Update class barrier with a completion function.
      • #8515 Async: Add shared_future::then.
      • #8519 Synchro: Update class barrier with a completion function
      • #8615 Async: Replace make_future/make_shared_future by make_ready_future.
      • #8627 Async: Add future<>::unwrap and unwrapping constructor.
      • #8677 Async: Add future<>::get_or.
      • #8678 Async: Add future<>::fallback_to.
      • #8891 upgrade_to_unique_lock: missing mutex() function.
      • #8955 Request for more efficient way to get exception_ptr from future.
    • Fixed Bugs:
      • #7461 detail::win32::ReleaseSemaphore may be called with count_to_release equal to 0
      • #8070 prefer GetTickCount64 over GetTickCount
      • #8768 win32 condition_variable::wait_until infinite wait in rare cases.
      • #8817 Boost Thread Windows CE _createthreadex handling breaks mingw w64.
      • #8943 Failed to compile code using boost::call_once with Intel C++ Composer XE 2013 on Windows.
      • #8931 Typos in external_locking reference.
      • #9029 Misprint in documentation.
      • #9037 gcc -Wshadow gives warnings in condition_variable{,_fwd}.hpp.
      • #9041 Boost.Thread DSO's may need to link with Boost.Atomic.
      • #9048 boost::scoped_thread useless ctor with variadic template arguments.
      • #9079 Condition variable will wait forever for some timepoint values (Win).
  • Timer:
    • Fixed compilation on Intel compiler #8956.
  • Type Traits:
    • Added is_copy_contructible trait #8802.
  • Unordered:
    • Avoid some warnings (#8851, #8874).
    • Avoid exposing some detail functions via. ADL on the iterators.
    • Work around variadic parameter bug in Visual Studio 2013. The compiler still has problems with initializer lists, but it might not be possible to work around those.
  • Utility:
    • boost::result_of can be set to use TR1 protocol by default and fall back to decltype if the function object does not support it (like C++11 lambda functions, for example). Define BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK configuration macro to enable this mode.
    • Improved support for C++11 in the boost::base_from_member class template. The class implements perfect forwarding for the constructor arguments, if the compiler supports rvalue references, variadic templates and function template default arguments.
    • Added boost/utility/explicit_operator_bool.hpp and boost/utility/empty_deleter.hpp headers, which were extracted from Boost.Log. The headers implement utilities for defining explicit conversion operators to bool and a deleter function object that does nothing, respectively.
  • Variant:
    • Fixed compilation of constructor and assignment operator with const rvalues input parameters #8988.
    • Fixed compilation of move assignment operator for situations when one of the variant template classes has nothrow copy constructor and throwing move constructor #8772.
    • Fix compilation on exception-disabled environments #8717.
    • Fix unreachable code warnings #8665.
    • Removed duplicate code #7601.
  • Wave:
  • xpressive:
    • #8843 throw instead of assert at incomplete charset
    • #8880 remove unused local typedef
    • #8882 use RAII instead of try/catch in sequence_stack.hpp
    • #8474 make xpressive play nice with clang's -Wimplicit-fallthrough diagnostic

Updated Tools

Compilers Tested

Boost's primary test compilers are:

  • Linux:
    • Clang: 3.3, 3.2, 3.1, 3.0
    • Clang, C++11, libc++: 3.4, 3.3
    • GCC: 4.8.1, 4.7.3, 4.6.3, 4.5.3, 4.4.7
    • GCC, C++11: 4.8.1
    • GCC, C++98: 4.8.1
  • OS X:
    • GCC: 4.2
    • Apple Clang: 5.0
    • Apple Clang, C++11: 5.0
  • Windows:
    • GCC, mingw: 4.8.0, 4.7.2, 4.6.3, 4.5.4, 4.4.7
    • Visual C++: 11.0, 10.0, 9.0

Boost's additional test compilers include:

  • OS X:
    • Apple Clang: 5.0
    • Apple Clang, C++11: 5.0
    • Clang: trunk
    • Clang, C++11: trunk
    • GCC: 4.2.1
  • Linux:
    • Clang: 3.3, 3.2, 3.1, 3.0, trunk
    • Clang, C++11: 3.4
    • Clang, C++11, libc++: 3.4, 3.3
    • GCC: 4.9.0 (experimental), 4.8.1, 4.7.3, 4.6.4, 4.5.3, 4.4.7
    • GCC, C++11: 4.8.1
    • GCC, C++98: 4.8.1
    • Intel: 13.0.1, 12.1.6
  • Windows:
    • GCC, mingw: 4.8.0, 4.7.2, 4.6.3, 4.5.4, 4.4.7
    • Visual C++: 11.0, 10.0, 9.0

Acknowledgements

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