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

In Progress Releases

Note: The release notes on this page are for releases still under development. Please don't use this page as a source of information, it's here for development purposes only. Everything is subject to change.

Version 1.86.0

In Progress

New Libraries

  • TODO

Updated Libraries

  • Atomic:
    • Use futex(2) system call on OpenBSD since recent OpenBSD versions have removed support for syscall(2).
  • Beast:
    • API Changes
      • Added HTTP status code 418 I'm a teapot.
    • Fixes
      • Narrowing conversion in read_size_hint_db().
      • Overloads that are ambiguous when using default completion tokens.
      • Misplaced static_assert in http::basic_fields move-assignment operator.
      • Underflow of bytes_transferred in WebSocket partial write operations.
      • websocket::stream::read_size_hint() does not exceed read_message_max.
      • Various warnings in tests.
      • Error handling in SSL shutdown operations in examples.
      • Annotate fallthrough case in zlib.
      • Handling of expired timers in basic_stream::ops::transfer_op.
      • Ambiguity in test::basic_stream constructor overloads.
      • Partial parsing of the final chunk in http::parser.
    • Improvements
      • Graceful shutdown in server_flex_awaitable example.
      • Simplified awaitable examples.
      • Added fuzzing targets.
      • Remove superfluous uses of std::bind in some examples.
      • ssl_stream does not use flat_stream.
    • Documentation
      • ssl_stream and flat_stream marked as deprecated.
      • net::ssl::stream is canonical in snippets and examples.
      • Added SSL/TLS Shutdown Procedure section.
    • Acknowledgements
      • tyler92, Ruslan Zakirov, Orgad Shaneh, Alexander Kernozhitsky
  • Cobalt:
    • Added support for asio::cancel_after
    • Made asio::deferred co_await-able, because it's asio's default token
    • Added noop utility
    • Added experimental support for stackful coroutines/fibers
    • Fixed movability of channel & coroutine types
  • Compat:
    • Added bind_front.hpp, bind_back.hpp, invoke.hpp, mem_fn.hpp, integer_sequence.hpp and type_traits.hpp.
    • Added function_ref.hpp.
  • Core:
    • Added a boost/core/pointer_in_range.hpp header with a pointer_in_range function template to check if a pointer is within a given range.
    • Fixed type_name for abstract classes. (#172)
    • Fixed boost/core/type_name.hpp compilation error with MSVC with disabled native wchar_t type. (#173)
  • CRC:
    • C++03 is no longer supported; a C++11 compiler is required. (This includes GCC 4.6 or later, and MSVC 10.0 (VS 2010) or later.)
    • Removed dependencies on Array, Config, Integer, and TypeTraits. The library is now standalone.
  • Filesystem:
    • is_empty operation is now better protected against concurrent filesystem modifications.
    • On POSIX systems, is_empty now indicates error if invoked on a file other than a regular file or a directory.
    • On Windows, fixed file_size and is_empty operating on symlinks rather than the files the symlinks refer to. (#313)
    • directory_entry::refresh no longer throws an exception if the file referenced by the entry doesn't exist. This makes directory_entry::status and directory_entry::symlink_status, as well as methods based on them, behave similarly to the equivalent standalone operations. The fact that the file does not exist is still indicated via the error_code returned by the corresponding directory_entry::refresh overload, or can be seen by testing if the file type returned by directory_entry::status or directory_entry::symlink_status calls is file_type::file_not_found. (#314)
    • Fixed weakly_canonical testing path elements for existence relative to the current path instead of the base path specified in the call, if the input path was a relative path.
    • On Windows, fixed weakly_canonical producing incorrect result path when the input path started with "..". (#311)
  • Format:
    • C++03 is no longer supported; a C++11 compiler is required. (This includes GCC 4.7 or later, and MSVC 12.0 (VS 2013) or later.)
  • Function:
    • Removed dependency on Boost.TypeTraits.
    • Brought back the argN_type typedefs that were accidentally lost in 1.85.
  • GIL:
    • Added
      • Added tell() and error() functions to istream_device and ostream_device classes (PR#747).
    • Changed
      • Don't ignore custom color converter in color_converted_view function (PR#726).
      • Added workaround for conflict with min() and max() macros on WinAPI (PR#745).
      • The use of boost::filesystem in GIL is now configurable in CMake via option BOOST_GIL_USE_BOOST_FILESYSTEM (PR#743).
    • Fixed
      • Fixed convolution in convolve_2d (PR#723)
      • Normalize Gaussian 2D kernel to avoid darkening (PR#725)
      • Wrong buffer size in path string conversion functions for std::wstring is fixed, avoiding buffer overflows when using I/O-related functions with std::wstring paths (PR#746).
    • Acknowledgements
      • Christoph Gringmuth, Christopher Kormanyos, nicolacandussi, Dirk Stolle, Olzhas Zhumabek
  • Graph:
    • Major update: C++14 is the new minimum standard; this was partly dictated by dependencies (at least to C++11) and partly by choice. If you require support for an older standard, please contact the maintainer.
    • Remove direct dependency on Boost.Regex.
    • Fix several compilation errors caused by not explicitly including common headers.
    • isomorphism: Fix docs, ignore vertex_max_invariant parameter in favour of cheaply calculating upper exclusive bound, fix bug with Associative Property Map, improve space efficiency from linear in the size of the maximum invariant to linear in the size of g1.
    • boykov_kolmogorov_max_flow: Fix named parameter overload.
    • adj_list_edge_iterator: Fix maybe-uninitialized warnings.
    • hawick_circuits: Add a parameter to optionally limit the depth of the search, causing a potentially suboptimal answer to be returned early.
    • disjoint_sets: Improve performance of link_sets by removing redundant lookup of set representatives.
    • maximum_adjacency_search: Refactor and more tests.
    • property: Use BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS to remove wasted space.
    • labeled_graph: Fix remove_labeled_vertex so that it actually removes the label too.
    • r_c_shortest_paths: Fix bug that the single-solution variant did not always return the shortest path.
    • read_graphviz: Fix stack overflow (oss-fuzz issue 66719) and non-keyword subgraph parsing.
    • Many miscellaneous improvements: broken links, typos, etc.
  • LexicalCast:
    • Fixed conversion of std::basic_string_view and boost::basic_string_view containing one or more \0 characters. Issue was introduced in 1.85.0.
  • Locale:
    • Add support for custom allocators in conv::utf_to_utf
    • Don't build examples by default
  • Log:
    • Added a workaround for windres.exe issue, when it is used in CMake to compile event log resource files on MinGW-w64. (PR#231)
  • MySQL:
    • The long-deprecated functions query, start_query, execute_statement and start_statement_execution (and their async equivalents) have been removed.
    • Breaking changes to experimental APIs:
      • The identifier class (client-side SQL formatting) has been removed. Use the new format specifiers feature, instead.
      • The required interface for custom formatters has been changed to accomodate the new format specifiers API.
      • any_connection::async_connect now requires that its connect_params argument be kept alive until the operation completes. The overload taking a const connect_params* has been removed.
      • character_set::name is now a const char* instead of a string_view, as MySQL character set names can't contain NULL characters.
      • any_connection internal buffer is now limited to 64MB. If you need to read or write rows bigger than that, increase any_connection_params::max_buffer_size. connection and their helper typedefs are not limited.
      • Renamed any_connection_params::initial_read_buffer_size to initial_buffer_size.
      • Renamed pool_params::initial_read_buffer_size to initial_buffer_size.
    • New experimental API: pipelines. Pipelines can increase efficiency by coalescing several requests in a single network packet. Pipelines can be used to run text queries, prepare, execute and close statements, reset session state and set the connection's character set.
    • Client-side SQL formatting now supports ranges out of the box. Formatting can be further customized using the new sequence function. Use cases like batch inserts and batch lookups can be significantly simplified using this functionality.
    • Client-side SQL formatting now supports format specifiers which modify how values are formatted. {:i} formats a string as a dynamic SQL identifiers, and {:r} outputs a raw unescaped
    • The static interface (static_results and static_execution_state) now supports Boost.Pfr types using pfr_by_name and pfr_by_position. Added underlying_row_t to support such types.
    • date and datetime can now be constructed from and converted to C++20 std::chrono::local_time.
    • Added any_connection_params::max_buffer_size, which allows to set a limit to the connection's internal buffer.
    • Added is_fatal_error, which allows users can now distinguish between fatal (which require closing and re-opening the connection) and non-fatal error codes.
    • Added formattable_ref, a type-erased reference type that can refer to any type satisfying the Formattable concept.
    • Fixed an ODR violation under MSVC which could cause crashes in release builds when using Boost.MySQL with other code also using asio::coroutine in different translation units.
  • Process:
    • Moved the old boost.process to v1 subfolder and inline namespace. deprecated process/*.hpp v1 headers
    • Turned v2 into a compile library.
    • Fixed usage on alpine linux / musl
  • Stacktrace:
    • Big new feature: stacktrace from arbitrary exception for Windows. std::stacktrace::from_current_exception() now works on Windows platform. Many thanks to huangqinjin for the implementation PR#159 Now on POSIX and Windows the from_current_exception() function returns the stacktrace of the current exception object as if the stacktrace was captured at the point of throwing the exception.
    • Fixed inclusion of rarely used Windows SDK headers which can cause conflict with other code using Windows SDK. Thanks to Marat Abrarov for fixing the issue PR#157.
    • Build option boost.stacktrace.from_exception now properly works on MacOS. Thanks to Peter Dimov for the fix PR#166.
    • Fixed a typo in assert expression. Thanks to Kilian Henneberger for the bug report #164.
    • Fixed shadowing warnings. Thanks to Nigel Stewart for the bug report #141.
    • Added dladdr minimal support for AIX. Many thanks to ClĂ©ment Chigot for the implementation PR#114.
    • Added Boost::stacktrace CMake alias that refers to the best supported implementation of Boost.Stacktrace on the platform. Thanks to Alex for the feature PR#167.
    • Significant improvement of CMake: multiple fixes, added many new tests, improved CI. Many thanks to Peter Dimov for all the improvements.
    • Fix addr2line work when the process is looked up via PATH. Thanks to Schreischildkroete for the bug report and to Jens Richter for fix #72.
  • Unordered:
    • Added container pmr aliases when header <memory_resource> is available. The alias boost::unordered::pmr::[container] refers to boost::unordered::[container] with a std::pmr::polymorphic_allocator allocator type.
    • Equipped open-addressing and concurrent containers to internally calculate and provide statistical metrics affected by the quality of the hash function. This functionality is enabled by the global macro BOOST_UNORDERED_ENABLE_STATS.
    • Avalanching hash functions must now be marked via an is_avalanching typedef with an embedded value constant set to true (typically, defining is_avalanching as std::true_type). using is_avalanching = void is deprecated but allowed for backwards compatibility.
    • Added Visual Studio Natvis framework custom visualizations for containers and iterators. This works for all containers with an allocator using raw pointers. In this release, containers and iterators are not supported if their allocator uses fancy pointers. This may be addressed in later releases.
  • UUID:
    • Major update.
    • C++03 is no longer supported, a C++11 compiler is required. (This includes GCC 4.8 or later, MSVC 14.0 (VS 2015) or later, and MinGW-w64.)
    • Decreased number of Boost dependencies from 39 (in total) to just 5.
    • Updated to reflect the newer RFC 9562.
    • Added generators for time-based UUIDs.
    • Many other improvements, see the revision history.
  • WinAPI:
    • Added BOOST_USE_WINAPI_VERSION CMake option, which allows users to specify the Windows version for Boost to target.

Updated Tools

  • BoostBook:
    • DTD updated: constructor, copy-assignment and destructor elements are now allowed inside method-group elements.
    • Many fixes and improvements in Doxygen-generated documentation:
      • Fixed duplicate equal signs in Doxygen-generated enum value initializers.
      • Disabled alphabetical sorting of function arguments. The sorting can be re-enabled by setting the new boost.sort.params XSL parameter to 1.
      • Added support for custom class member grouping. See Doxygen tags @name and @{/@}.
      • Added support for Doxygen references to classes, methods, enums, variables, etc. (see @ref tag).
      • Added support for @remark and @important tags.
      • Added support for @parblock tags, which can be used to place multiple paragraphs under a tag that expects a single paragraph as an argument (e.g. @returns).
      • Template parameter defaults that refer to implementation details are now concealed, similar to function parameter defaults.
      • Improved presentation of unnamed enums. Instead of showing a synthesized name such as @0, the name is either omitted or is [unnamed], if the name is necessary to introduce a link to the enum documentation.
      • Changed the "See Also" (@sa) blocks to be displayed inline, similar to "Returns".
      • Fixed presentation of multiple exception specifications (@throws).
      • Added support for free form description of throwing behavior. If the exception type after the @throws tag is "~" then the exception type is omitted from the output, and the following description is displayed directly in the "Throws" section.
      • Removed redundant spaces in return types and template parameters.
  • Build:

Compilers Tested

Boost's primary test compilers are:

  • Linux:
    • Clang, C++03: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++11: 3.4, 11.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++17: 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++20: 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • GCC, C++03: 4.6.3, 11, 12
    • GCC, C++11: 4.7.3, 4.8.5, 11, 12
    • GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11, 12
    • GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11, 12
    • GCC, C++20: 8.0.1, 9.1.0, 10, 11, 12
  • OS X:
    • Apple Clang, C++03: 11.0.3
    • Apple Clang, C++11: 11.0.3
    • Apple Clang, C++14: 11.0.3
    • Apple Clang, C++17: 11.0.3
    • Apple Clang, C++20: 11.0.3
  • Windows:
    • Visual C++: 10.0, 11.0, 12.0, 14.0, 14.1, 14.2, 14.3

Acknowledgements

Marshall Clow and Glen Fernandes managed this release.