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

Version 1.60.0

December 17th, 2015 15:52 GMT



New Libraries

  • VMD: Variadic Macro Data library, from Edward Diener.

Updated Libraries

  • Atomic:
    • Enforced proper alignment of atomic<> storage. This should fix possible issues on platforms that support atomic operations on data units larger than the native word size. This may also change binary layout of user's data structures that have atomic<> members.
    • Fixed compilation for PowerPC with IBM XL C++ compiler. Corrected memory barriers in PowerPC assembler.
    • Fixed compilation with MSVC-8 for ARM.
    • Fixed compilation with gcc 4.4 for x86-64, when 128-bit atomic operations were used. (#10994)
    • Optimized some gcc assembler blocks for x86/x86-64 to reduce the number of used registers. This may require binutils 2.10 or later.
  • Chrono - 2.0.5:
    • Fixes:
      • #10778 VC14 CTP4 Atomic don't compile with boost::chrono durations which are not TriviallyCopyable
      • #10840 Missing std:: qualifier for puts call in test_7868.cpp
      • #10851 Missing std:: qualifier for puts call in time_point_output.cpp
      • #10893 Minor doc typo in Boost.Chrono
      • #10992 Chrono IO state savers inconsistent with Boost.IO state savers
      • #10995 duration_put::put_value truncates fractional part
      • #11006 Impossible to instantiate time_fmt_io_saver due to several errors.
      • #11012 chrono_io v2 fail to compile with boost::chrono::duration< boost::rational<int> >
  • Context:
    • #11603 typo in PPC32/MACH-O asm
    • support for CYGWIN
  • Core:
    • In symbol demangling tools, added support for gabi++ ABI implementation used in Android NDK.
    • Added a new enable_if_has_type tool for performing SFINAE checks for presence of a nested type.
  • Filesystem:
    • New Features:
      • Added functions lexically_normal, lexically_relative, relative, and weakly_canonical. Many thanks to Jamie Allsop for his help and perseverance. Resolves tickets #1976, #5897, #6249.
      • Class path added types reverse_iterator and const_reverse_iterator, and added functions rbegin(), and rend().
      • C++11 noexcept supplied as specified in the Filesystem TS if supported by the compiler.
      • C++11 move constructors and move assignments supplied as specified in the Filesystem TS if supported by the compiler. Resolves #10291.
      • Existing functions whose names changed in the Filesystem TS are now supported under both the old and new names.
      • Added size() function to class path. Resolves #6874, Path should have a size() member function.
    • Tickets:
      • Fix #11733, Missing unistd.h include in boost/libs/filesystem/src/unique_path.cpp, by apply a patch from Idar Tollefsen.
      • Fix #5706, unique_path Fails on Windows for Temporary User Profiles, by applying pull request #15 from Sebastian Redl to fix a race condition in unique_path.
      • Fix #10591, boost::filesystem does not build on iOS 8, by applying a patch submitted by Daniel Seither.
      • Fix #9454, Boost Filesystem [library build] not compiling when BOOST_FILESYSTEM_NO_DEPRECATED is defined, by applying a patch submitted by Makesim.
      • Fix #11447, __OpenBSD__ macro name misspelled, by applying a patch submitted by Jasper Lievisse Adriaanse.
      • Fix #11288, A patch to avoid redundant string allocations, by applying a patch submitted by Yevhen Ivannikov.
      • Resolve #11175, out-of-date documentation causing users to incorrectly expect that the library could be used with exceptions disabled.
      • Resolve #11166, by mitigating (i.e. reducing the likelihood of) a possible external file system race in remove().
      • Fix #7258, create_directories returns false if the path ends with a slash. Also fix related issues if path contains dot or dot-dot elements, and added test cases to the test suite.
      • Resolve #10766, parent_path() with redundant separator returns wrong value, by adding examples and notes to the reference documentation to show why the returned value is in fact correct, and to provide rationale for that behavior. See path.itr, and path.decompose parent_path() and filename() sections of the reference docs.
      • Close #7607, path should not infer an invisible "." at the end of a path that ends with a slash, as resolved by #7258 and #10766.
      • Close #11061, #11062, Impossible to traverse the path of the reverse iterator, as effectively resolved by the addition of the class path reverse iteration feature. The reference documentation has also been updated with a note warning about the limitations of class path iterators.
    • Other fixes:
      • Clear several spurious GCC warnings.
      • Fix bug in file_status and recursive_directory_iterator: C++ turns an explicit constructor with all arguments except first defaulted into non-explicit single argument constructor.
      • Apply Reference docs editorial cleanups: Use same style sheet as the rest of the documentation. Tweak tab font size. Fix excessively long lines in tables, synopsis.
      • Minor fixes, including pull requests from Jonathan Wakely and Marcel Raad.
  • Flyweight:
    • Maintenance fixes.
  • Fusion:
    • All of fusion containers and generators now support C++11 variadic templates. (pull-request 89, pull-request 97, pull-request 100)
      • Special notice for fusion::vector
        • Due to implementation limitation, numbered form (i.e. fusion::vectorN) is provided via C++11 aliasing templates and deprecated in C++11 or later. In this case, you should check BOOST_FUSION_HAS_VARIADIC_VECTOR macro and switch usage because some partial specialization would become compile error (e.g. pull-request for Spirit).
    • fusion::nview now support C++11 variadic templates. (pull-request 90)
    • fusion::fold is now SFINAE-friendly. (pull-request 102)
    • Bug fixes:
      • The generic fusion sequence convert to a deque fails with a compiler error. (#11572)
      • (doc) Return type of functions incorrect. (#3358)
  • Geometry:
    • Solved tickets:
      • #10803 Union algorithm returning invalid geometry
      • #11522 Namespace clash in buffer for traits::detail
      • #11533 Assert failure in rtree caused by a bug in remove() if min elements number is 1
      • #11607 Private geometry::exception::what()
      • #11709 is_simple segfault
      • #11710 is_simple - empty geometry logic
      • #11711 is_simple and is_valid - Points that are NaN or Infinity
    • Bugfixes:
      • Fix colocations of touching interior ring / exterior ring, where it also touches another polygon
      • Fix removing values from an empty rtree - no effect and 0 returned instead of assertion failure
      • Fix segfault in centroid for multi geometries containing empty single geometries (thanks to Jiri Drbalek)
      • Fix liang_barsky strategy for integral coordinates (thanks to Dane Springmeyer)
  • Interprocess:
  • Intrusive:
  • Lexical Cast:
    • Fixed usage of lexical_cast with move only types #11570
    • Fixed crash when BOOST_LCAST_NO_COMPILE_TIME_PRECISION is defined #11669
    • Suppress some of the warning reported in #11570 and #4946
  • Locale:
    • Implemented generic codecvt facet and add general purpose utf8_codecvt facet
    • Added posix locale support for FreeBSD 10.0 and above
    • Fixed issues #10017 (sun redefinition on SunOS), #11163 (set_default_messages_domain incorrect behavior), #11673 build issues
    • Some warning cleanup
    • Fixed tests for latest ICU versions
    • Added workaround for libc++ issues
    • Added new defines BOOST_LOCALE_ENABLE_CHAR16_T and BOOST_LOCALE_ENABLE_CHAR32_T to enable C++11 char16_t and char32_t instead of deprecated ones
  • Log:
    • General changes:
      • On Windows, the configuration macro BOOST_LOG_USE_WINNT6_API is no longer used by the library. The target Windows version should be configured by defining macro BOOST_USE_WINAPI_VERSION.
    • Bug fixes:
      • Fixed compilation for Android using Google NDK. (#11559)
      • Fixed compilation of some logging statements, where the first object to be put into stream is not directly supported by formatting_ostream. (#11549)
      • Added a workaround for Solaris Studio 12.4, which should fix the compilation of formatting_ostream. (#11545)
      • Fixed compilation when native wchar_t type is disabled. (#11541)
      • Fixed exporting symbols from the boost_log_setup library on POSIX-like systems.
      • Fixed compilation of character decorators.
      • Added a workaround for incorrect file name generation in text file sink backend, when the file name contains date/time placeholders. (#11691)
    • See changelog for more details.
  • Multi-index Containers:
    • Fixed an interoperability problem with Qt due to the optional definition of a macro with name foreach in this framework.
    • Maintenance fixes.
  • odeint:
    • New features:
      • Added functionality to throw an exception if too many ODE steps are performed.
      • Added possibility to limit maximal step size in adaptive methods.
    • several Bug fixes, see
  • Optional:
    • Changed the implementation of boost::none again. Now it is a const object with internal linkage (as any other tag). This fixes #11203.
  • Predef:
    • Add detection of SIMD hardware.
    • See history for more details.
  • Test:
  • Thread - 4.6.0: New Experimental Features:
    • #11231 Allow to set continuation future's destructor behavior to non-blocking
    • #11424 Provide shared_timed_mutex as an alternative name for shared_mutex and deprecate the use of shared_mutex as a timed mutex
    • #11734 future::then(Cont) should be able to execute the contination on undetermined thread
    • #11736 Allow to use launch::executor on future::then(launch::executor, cont)
    • #11737 Add a launch::inherit policy that can be used on ::then() to use the policy of the parent future Fixed Bugs:
    • #3926 thread_specific_ptr + dlopen library causes a SIGSEGV.
    • #6377 Condition variable blocks when changing time
    • #6787 boost::thread::sleep() hangs if system time is rolled back
    • #7665 this_thread::sleep_for no longer uses steady_clock in thread
    • #7720 exception lock_error while intensive locking/unlocking of mutex
    • #9309 test_latch fails often on clang-darwin-tot11
    • #10788 GetLogicalProcessor isn't available for Windows platform less or equals to 0x0502
    • #11090 ex_future_unwrap- ThreadSanitizer: lock-order-inversion (potential deadlock)
    • #11158 Pthread thread deadlock when faketime used
    • #11174 boost::condition_variable::timed_wait with predicate unexpectedly wakes up while should wait infinite
    • #11185 Incorrect URL redirection
    • #11192 boost::future<>::then() with an executor doesn't compile when the callback returns a future
    • #11250 future made from make_exceptional fails on assertion in destructor
    • #11256 future<>::is_ready() == false in continuation function
    • #11261 bad use of scoped threads in basic_thread_pool
    • #11262 bad use of direct pointer in shared_state_nullary_task
    • #11263 lock already locked lock
    • #11266 boost::packaged_task has invalid variadic signature
    • #11302 boost thread doesn't build with BOOST_THREAD_PATCH.
    • #11322 sleep_for() nanoseconds overload will always return too early on windows
    • #11329 using declarative for GetProcessHeap, .... fails
    • #11368 boost thread's usage of CreateWaitableTimer wakes PC from sleep (doh)
    • #11377 Boost condition variable always waits for system clock deadline
    • #11435 gcc compiler warning in future.hpp
    • #11555 devector.hpp assumes allocator_traits_type is always present
    • #11562 Timer (using steady_clock) expires after computer time is set forward on Ubuntu 64-bit
    • #11672 Thread: Should use unique_ptr, not auto_ptr
    • #11688 thread::try_join_until: Avoid busy wait if system clock changes
    • #11716 ::then(f) should inherit the parent Executor
  • UUID:
    • Added a workaround for MSVC codegen bug that could cause crashes when comparing UUIDs.
    • Added detection of AVX being enabled with MSVC compiler switches.


Notes for Windows users

This release of Boost will by default compile for Windows Vista/Windows Server 2008, if the compiler supports a recent enough Windows SDK, and for Windows XP otherwise. Binaries compiled with default options may not run on the older Windows versions.

It is still possible to explicitly specify target Windows version by defining BOOST_USE_WINAPI_VERSION to a numeric version of Windows API. For example, building Boost for Windows XP can be done with the following command:

    b2 release define=BOOST_USE_WINAPI_VERSION=0x0501

The list of Windows API version numbers can be seen on this page.

This change only concerns libraries that use the common Windows API abstraction layer. Currently, these libraries are: Boost.Chrono, Boost.Dll, Boost.Log, Boost.UUID. This will also affect all dependent libraries.

Release of Hana postponed

Due to time constraints, the release of Hana will be postponed to a later release of Boost. This will also allow some known issues to be addressed properly before releasing the library officially as a part of Boost. More information can be found on the mailing list.

Release of Boost.DLL library postponed

In order to provide superior support of uncommon toolsets and platforms, the release of Boost.DLL was postponed to a later release of Boost. This also allows to test better a recently added ability to copy construct and copy assign instances of boost::dll::shared_library and provide examples on importing functions with non default calling conventions. Latest version and developer documentation of the library could be found at GitHub repo.

Compilers Tested

Boost's primary test compilers are:

  • Linux:
    • Clang: 3.4, 3.6
    • Clang, C++14: 3.7
    • GCC: 4.4.7, 4.8.4, 4.9.3, 5.1.0, 5.2.1
    • GCC, C++11: 4.4.7
    • GCC, C++14: 4.9.3
  • Windows:
    • GCC, C++03, mingw: 3.4.5
    • GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1
    • GCC, C++14, mingw: 4.9.3, 5.1.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
  • Android:
    • Clang: 3.6, 3.7
    • GCC: 4.9.0, 5.2.0
  • QNX:
    • QCC: 4.4.2
  • SunOS:
    • Oracle Solaris Studio: 12.4, 12.5

Boost's additional test compilers include:

  • Linux:
    • Clang: 3.0, 3.1, 3.2, 3.3, 3.4.2, 3.6.0, 3.8.0
    • Clang, C++14: 3.7.0
    • GCC: 4.4.7, 4.5.3, 4.6.4, 4.7.3, 4.8.1, 4.9.3, 5.1.0, 6.0.0
    • GCC, C++11: 4.4.7
    • GCC, C++14: 4.9.3, 5.2.1
    • IBM XL C++:
    • Intel: 16.0
  • OS X:
    • Clang: 7.0.0
    • GCC: 5.2.0
  • Windows:
    • GCC, C++03, mingw: 3.4.5
    • GCC, C++11, mingw: 4.7.3, 4.8.1
    • GCC, C++14, mingw: 4.9.3, 5.1.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
  • Android:
    • Clang: 3.6, 3.7
    • GCC: 4.9.0, 5.2.0
  • FreeBSD:
    • Clang, C++11: 3.4.1, 3.7.0
    • GCC, C++11: 4.8.5, 5.2.0, 6.0.0
  • QNX:
    • QCC: 4.4.2
  • SunOS:
    • Oracle Solaris Studio: 12.4, 12.5


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