What's new in 1.66.0

  • New libraries

    Added Beast, CallableTraits, and Mp11 covering networking, callable introspection, and metaprogramming.

  • Performance improvements

    basic_socket drops service template and concurrency hints can disable locking per io_context for faster I/O.

  • Dependencies

    Added 6 dependencies across 6 libraries and removed 4 across 3 libraries.

  • Security & reliability

    Regex fixes address multiple de‑fuzzed security issues and numerous bug fixes improve stability.

  • Developer experience

    format_matrix tool exercises format strings, and boost::apply_visitor now perfect‑forwards visitables.

Release notes version 1.66.0

Version 1.66.0

December 18th, 2017 13:58 GMT

Documentation

Third Party Downloads

Note about the new Visual Studio release

Visual Studio 15.5 was released too late for us to test this release with it.

New Libraries

  • Beast:
    • Portable HTTP, WebSocket, and network operations using only C++11 and Boost.Asio, from Vinnie Falco.
  • CallableTraits:
    • A spiritual successor to Boost.FunctionTypes, Boost. is a header-only C++11 library for the compile-time inspection and manipulation of all 'callable' types. Additional support for C++17 features, from Barrett Adair.
  • Mp11:
    • A C++11 metaprogramming library, from Peter Dimov.

Updated Libraries

  • Asio:
    • Implemented interface changes to reflect the Networking TS (N4656).
      • See the list of new interfaces and, where applicable, the corresponding old interfaces that have been superseded.
      • The service template parameters, and the corresponding classes, are disabled by default. For example, instead of basic_socket<Protocol, SocketService> we now have simply basic_socket<Protocol>. The old interface can be enabled by defining the BOOST_ASIO_ENABLE_OLD_SERVICES macro.
    • Removed previously deprecated functions.
    • Added support for customised handler tracking.
    • Added reactor-related (i.e. descriptor readiness) events to handler tracking.
    • Added special "concurrency hint" values that may be used to disable locking on a per io_context basis.
    • Enabled perfect forwarding for the first ssl::stream<> constructor argument.
    • Added ability to release ownership of the underlying native socket. (Requires Windows 8.1 or later when using the I/O completion port backend.)
  • Atomic:
    • Implemented a set of experimental extended atomic operations for integral types:
      • fetch_negate, fetch_complement - atomically replaces the value with a negated or binary complemented value and returns the original value
      • opaque_<op> - equivalent to fetch_<op> except that it doesn't return the original value
      • <op>_and_test - atomically applies <op> and returns true if the result is zero. Note: The result of these operations will change to the opposite in Boost 1.67. The code that uses these functions will need to be updated.
      • bit_test_and_set, bit_test_and_reset, bit_test_and_complement - atomically sets, resets or complements the specified bit and returns the original value of the bit
    • Following C++17 (P0558R1), arithmetic operations for pointers to non-object types are no longer provided.
    • Also following C++17 exposed atomic<T>::value_type and atomic<T>::difference_type member typedefs, where applicable, to the user's code.
    • Improved compatibility with gcc 7. In particular, using 128-bit operations on x86-64 should no longer require linking with libatomic (the compiler-supplied library).
  • DateTime:
    • The library has been converted to use Boost.WinAPI as the abstraction layer for Windows SDK.
    • Fixed an integral overflow that could cause incorrect results when adding or subtracting many years from a date (see here).
  • Fiber:
    • synchronization with CUDA streams
    • synchronization with ROCm/HIP streams
  • Format:
    • Improvements:
      • Accept new conversion specifiers:
        • a: sets flags fixed | scientific (i.e. hexfloat)
        • b: sets flag boolalpha
        • A: same as a plus flag uppercase
        • F: same as f plus flag uppercase
      • 42 Accept new argument types j and z from ISO C99 (parsed and ignored like all others).
      • 44 Accept new argument types I, I32, I64, and w from Microsoft (parsed and ignored like all others).
      • 33 Added a development tool called format_matrix that exercises as many different combinations of format strings as possible and logs them to a file:
        • helps prevent regressions in between boost releases
        • allows for comparison against snprintf
    • Bugfixes:
      • 36 Safely allow volatile arguments to be used with operator%
      • 4636 Explicit clamping provided to allow MSVC /RTCc to succeed
      • 7477 Fix compatibility with MSVC /Za
      • 10324 Const-correct cast issue resolved
      • 11632 Fix -fsanitize=undefined issue in alt_sstream.hpp
  • Fusion:
    • PR#149 isspace(c) is not a macro in Dinkum clib for VxWorks, thanks to Brian Kuhl(@kuhlenough).
    • PR#150 Remove circular preprocessor include, thanks to Gregor Jasny(@gjasny).
    • PR#151 Change base of fusion::tuple.
    • PR#153 Fixed compile error with std::array.
    • PR#154 Fixed bugs nesting and copying on c++03.
  • Geometry:
    • Improvements:
      • Add distance for geographic PointLike/AnyGeometry.
    • Bugfixes:
      • Fixes in results of union/intersection/difference which could be incorrect in very complex cases
      • Fixes in validity of union/intersection/difference/buffer
      • Fixes in set and relational operations for non-cartesian coordinate systems.
  • Iterator:
    • next()/prior() functions now support user's iterators that don't specify nested types such as iterator_category, difference_type, etc. and instead specialize std::iterator_traits to define those types. The compiler must support C++17-compatible std::iterator_traits for this to work.
  • Log:
    • Bug fixes:
      • Fixed a bug in file_collector::scan_for_files that could cause incorrectly named log files in the target directory after the user's application restart.
    • See changelog for more details.
  • Math:
    • New Features:
      • Add Gauss and Gauss-Kronrod quadrature routines.
      • Add double-exponential (tanh-sinh, exp-sinh and sinh-sinh) quadrature routines.
      • Add Chebyshev polynomial evaluation, roots, integration, differentiation, and interpolation routines.
  • Multi-index Containers:
    • Made modify and modify_key more robust so that the modified element is erased if the modifier throws or the rollback functor does not properly restore the element (full discussion at ticket #12542). This is technically backwards incompatible; for instance, the following code:
      c.modify(c.begin(),[](auto&){throw 0;});
      
      keeps the container c untouched in former versions of Boost whereas now c.begin() is erased. Thanks to Jon Kalb for raising the issue.
    • Maintenance fixes.
  • Optional:
    • On newer compilers optional is now trivially-copyable for scalar Ts. This uses a different storage (just T rather than aligned_storage). We require the compiler to support defaulted functions.
    • Changed the implementation of operator== to get rid of the -Wmaybe-uninitialized false-positive warning from GCC.
  • PolyCollection:
    • Boost.PolyCollection has been backported to GCC 4.8 to 4.9 and Clang 3.3 to 3.6. The version of libstdc++-v3 shipped with GCC 4.8 (which can also be used by Clang) has deficiencies that result in the following limitations when using Boost.PolyCollection:
      • Stateful allocators are not properly supported.
      • Allocator-extended move construction decays to allocator-extended copy construction.
      • Copy construction crashes if an exception is thrown during element copying.
    • Maintenance fixes.
  • Predef:
    • Improved Windows Universal Platform detection. (from James E. King, III)
    • Add detection for CloudABI with cloudlibc. (from James E. King, III)
    • Various other bug fixes.
  • Regex:
    • Bug fixes:
      • Numerous small fixes for security issues discovered by de-fuzzing.
  • Stacktrace:
    • Now works out-of-the-box on MinGW-w64.
    • Now works on MinGW (without -w64) if libbacktrace is properly installed. See "MinGW specific notes" section in documentation for more info.
  • Thread:
    • Bugs Fixes
      • #12323 windows - boost/thread/win32/mfc_thread_init.hpp has wrong signature for _pRawDllMainOrig
      • #12730 windows - static threads library is incompatible with MSVC 2017 RC
      • #12976 Boost Thread Executors documentation mistakes
      • #12949 using sleep_for in a thread context without including boost/thread/thread.hpp yields incorrect behaviour when BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC is defined
      • #13019 ABI compatibility for BOOST_THREAD_PROVIDES_INTERRUPTIONS incomplete
      • #13069 Boost unit test "sync_pq_multi_thread_p_lib.exe" hung in thread library
      • #13163 boost::detail::heap_new does not have a variadic variant
      • #13226 getpagesize() is deprecated since 199506L
      • #132 VS 2017.4 Preview deadlocks on Test 10964
      • #133 windows - Spurious timing test failures on windows
      • #134 VS 2017.4 Preview deadlock in sync_pq_multi_thread_p_lib.exe
      • #135 VS 2017.4 Preview test_scheduled_tp_p.exe deadlock
      • #136 VS 2017.4 Preview test_scheduler_p.exe deadlock
      • #137 VS 2017.4 Preview executor_ex.exe deadlock
      • #143 Failures on msvc-12.0
      • #145 Clang build error with BOOST_THREAD_ATTRIBUTE_MAY_ALIAS
    • New Experimental Feature
      • #116 [Proposal] Add APIs for deferred set_value/exception
  • Utility:
    • boost/next_prior.hpp has been moved to Boost.Iterator. No changes needed to the user's code.
  • Uuid:
    • Improvements:
      • 26 Refactored name_generator to support a configurable hash provider concept and provide an optional MD5 hash implementation per RFC-4122. This will make it easier to support whatever becomes the next standard hash algorithm.
      • 34 Added RFC-4122 namespaces in boost::uuids::ns.
    • Bugfixes:
      • 8630 11482 12253 Various deficiencies in string_generator were resolved.
      • 10665 name_generator::operator() is now const, matching docs.
      • Detail headers were moved into the detail subdirectory. No changes needed to user's code, however you may get build warnings if you use the old header location.
  • Variant:
    • boost::apply_visitor now does perfect forwarding of visitables #6971. Great thanks to Levon Tarakchyan for implementing this feature.

Compilers Tested

Boost's primary test compilers are:

  • Linux:
    • Clang: 3.0, 4.0.1, 5.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 5.0.1
    • Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.1
    • Clang, C++17: 5.0.1
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.2.0
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.2, 4.7.3, 4.8.5, 4.9.4, 6.4.0, 7.1.0, 7.2.0
    • GCC, C++14: 5.4.1, 6.3.0, 6.4.0, 7.1.0, 7.2.0, 7.2.1
    • GCC, C++17: 7.2.0
    • Intel: 18.0
  • OS X:
    • Clang: 9.0.0
    • Clang, C++11: 9.0.0
    • Clang, C++14: 9.0.0
    • Clang, C++1z: 9.0.0
  • Windows:
    • GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
    • GCC, C++0x: 4.6.4
    • GCC, C++11: 4.7.3
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • Android:
    • Clang: 3.6, 3.7, 3.8
    • GCC: 4.9, 5.4
    • GCC, C++14: 6.2
  • FreeBSD:
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0
  • QNX:
    • QCC, C++0x: 4.4.2
    • QCC, C++11: 4.7.3

Boost's additional test compilers include:

  • Linux:
    • Clang: 3.0, 3.8.1, 4.0.1, 5.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 5.0.1
    • Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.1
    • Clang, C++17: 5.0.1
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.2.0
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.2, 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 7.2.0
    • GCC, C++14: 5.4.1, 6.3.0, 6.4.0, 7.1.0, 7.2.0, 7.2.1, 8.0.0
    • GCC, C++17: 7.2.0
    • Intel: 18.0
  • OS X:
    • Clang: 9.0.0
    • Clang, C++11: 9.0.0
    • Clang, C++14: 9.0.0
    • Clang, C++1z: 9.0.0
  • Windows:
    • GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
    • GCC, C++0x: 4.6.4
    • GCC, C++11: 4.7.3, 4.8.1, 4.9.3
    • GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0, 7.1.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • Android:
    • Clang: 3.6, 3.7, 3.8
    • GCC: 4.9, 5.4
    • GCC, C++14: 6.2
  • FreeBSD:
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0
  • QNX:
    • QCC, C++0x: 4.4.2
    • QCC, C++11: 4.7.3

Acknowledgements

Beman Dawes, Daniel James, Vladimir Prus and Marshall Clow managed this release.

All Contributors


Join the Boost Developers Mailing List

Get the latest on releases, features, security patches, fixes and all major announcements.
Want to fix bugs, review code, maintain libraries, and propose new features?
Read our contributors guide and join the Boost community.

Boost is publicly released three times a year in April, August, and December. Each release has updates to existing libraries, and any new libraries that have passed the rigorous acceptance process.

Decorative illustration