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

Version 1.75.0 beta 1

November 14th, 2020 03:22 GMT


Beta Downloads
PlatformFileSHA256 Hash

New Libraries

  • JSON: JSON parsing, serialization, and DOM in C++11, from Vinnie Falco and Krystian Stasiowski.
  • LEAF: A lightweight error-handling library for C++11, from Emil Dotchevski.
  • PFR: Basic reflection without macro or boilerplate code for user defined types, from Antony Polukhin.

Updated Libraries

  • Atomic:
    • Implemented SSE2 and SSE4.1 versions of address lookup algorithm, which is used in the internal lock pool implementation. This may improve performance of waiting and notifying operations in heavily contended cases.
  • Container:
    • New devector container.
    • Fixed bugs/issues:
      • #152 Tree-based containers have troubles with move-only types.
      • #156 Compile error with vector.
      • PR#157 Add missing include.
      • #159: pmr::monotonic_buffer_resource crashes on large single allocations.
      • #160: Usage of uses_allocator needs a remove_cvref_t.
      • #162: small_vector on MSVC x86 call-by-value crash.
      • #161: polymorphic_allocator(memory_resource*) non-standard extension causes headache.
      • PR#163: container_rebind for small_vector with options.
      • #165: Link error with shared library and memory_resource inline members.
      • PR#166: Fix encoding error in copyright headers.
      • PR#167: error: the address of 'msg' will always evaluate as 'true' warning with GCC 4.4.
      • #169: flood of warnings building dlmalloc_ext_2_8_6.c on clang11.
  • Endian:
    • endian_arithmetic no longer inherits from endian_buffer
    • When BOOST_ENDIAN_NO_CTORS is defined, the unaligned endian_buffer and endian_arithmetic are C++03 PODs, to enable use of __attribute__((packed))
  • Filesystem:
    • New: Added creation_time operation, which allows to obtain file creation time. (Inspired by PR#134)
    • The returned value of last_write_time(p, ec) operation in case of failure has been changed to a minimal value representable by std::time_t instead of -1.
    • The returned value of hard_link_count(p, ec) operation in case of failure has been changed to static_cast<uintmax_t>(-1) instead of 0.
    • On POSIX systems, file_size will now indicate error code errc::function_not_supported if the path resolves to a non-regular file. Previously, errc::operation_not_permitted was reported.
    • On Linux, many operations now use statx system call internally, when possible, which allows to reduce the amount of information queried from the filesystem and potentially improve performance. The statx system call was introduced in Linux kernel 4.11.
    • Removed const-qualification from return types of some path methods. This could prevent move construction and move assignment at the call site in some cases. (#160)
    • On OpenBSD 4.4 and newer, use statvfs system call to obtain filesystem space information. (Inspired by PR#162)
  • GIL:
    • BREAKING: In next release, we are going to drop support for GCC 5. We may also change the required minimum C++ version from C++11 to C++14.
  • Interprocess:
    • Fixed bugs:
      • #127: static assertion failure with boost interprocess 1.74 and basic_managed_shared_memory.
  • Intrusive:
    • Fixed bugs:
      • PR#48: MSVC "assignment within conditional" warning fix.
      • PR#49: Fix empty control statement warnings.
      • #52: Invalid casting in BOOST_INTRUSIVE_BSR_INTRINSIC.
  • Log:
    • Bug fixes:
      • Corrected the file counter that would be used in text_file_backend when generating the target file name (based on the pattern set by set_target_file_name_pattern method) when the log file is rotated. (#125)
      • Replaced a volatile version counter in basic_sink_frontend with an atomic. (#128)
      • In the asynchronous_sink frontend, resolved a possible conflict between flush and run methods, if run is called from a user's thread instead of the internal dedicated thread spawned by the frontend. (#131)
    • See changelog for more details.
  • Move:
    • Fixed bugs:
      • #30: (void) C-cast is a non-portable way of suppressing compiler warnings.
  • Mp11:
    • Added mp_pairwise_fold (suggested by Barry Revzin)
    • Removed mp_invoke (use mp_invoke_q)
  • Polygon:
    • C++20 fixes for event_comparison_type, vertex_equality_predicate_type, and voronoi_predicates. (Glen Fernandes)
  • Outcome:
    • Announcements:
      • After a year and three major Boost releases announcing this upcoming change, this is the FINAL RELEASE of the v2.1 branch. From Boost 1.76 onwards, the v2.2 branch becomes the default. This branch has a number of major breaking changes to Outcome v2.1, see the documentation for details.
    • Enhancements:
      • The ADL discovered event hooks have been replaced with policy-specified event hooks instead. This is due to brittleness (where hooks would quietly self-disable if somebody changed something), compiler bugs (a difference in compiler settings causes the wrong hooks, or some but not all hooks, to get discovered), and end user difficulty in using them at all. The policy-specified event hooks can be told to default to ADL discovered hooks for backwards compatibility: set OUTCOME_ENABLE_LEGACY_SUPPORT_FOR to less than 220 to enable emulation.
      • Improve configuring OUTCOME_GCC6_CONCEPT_BOOL. Older GCCs had boolean based concepts syntax, whereas newer GCCs are standards conforming. However the precise logic of when to use legacy and conforming syntax was not well understood, which caused Outcome to fail to compile depending on what options you pass to GCC. The new logic always uses the legacy syntax if on GCC 8 or older, otherwise we use conforming syntax if and only if GCC is in C++ 20 mode or later. This hopefully will resolve the corner case build failures on GCC.
    • Bug fixes:
      • Boost.Outcome should now compile with BOOST_NO_EXCEPTIONS defined. Thanks to Emil, maintainer of Boost.Exception, making a change for me, Boost.Outcome should now compile with C++ exceptions globally disabled. You won't be able to use boost::exception_ptr as it can't be included if C++ exceptions are globally disabled.
      • #236 In the Coroutine support the final_suspend() was not noexcept, despite being required to be so in the C++ 20 standard. This has been fixed, but only if your compiler implements noop_coroutine. Additionally, if noop_coroutine is available, we use the much more efficient coroutine handle returning variant of await_suspend() which should significantly improve codegen and context switching performance.
  • Preprocessor:
    • When variadic data is empty in C++20 mode with __VA_OPT__ support the variadic size has been corrected to be 0. This also means that in this C++20 mode it is now valid to convert to and from empty arrays and lists and variadic data. The end-user can read the "C++20 Support For Variadic Macros" part of the "variadic macros" topic for more information about empty variadic data in the library.
    • A number of the limits defined in the config/limits.hpp can now be changed to higher amounts for a TU. The end-user should read the "limitations" topic to understand how and which limits can be changed.
    • The library has been upgraded to assume variadic macro support for any compiler working with the library. Ostensibly this means that the library is now a C++11 on up library, yet most of the major compilers, including gcc, clang, and VC++, also support variadic macros in C++98/C++03 mode as long as strict compliance to C++98/C++03 is not turned on when using one of those compilers.
  • System:
    • The platform-specific headers windows_error.hpp, linux_error.hpp, and cygwin_error.hpp emit deprecation messages and are slated for removal.
    • The old names for generic_category() and system_category() emit deprecation messages and are slated for removal.
    • error_condition::failed is deprecated and is slated for removal. operator bool() for error_condition has been reverted to its old meaning of value() != 0. This is done for compatibility with std::error_condition as the next release is expected to improve interoperability with <system_error> even further. Note that this does not affect error_code::failed, which is still alive and well.
    • The overload of error_condition::message that takes a buffer is deprecated and is slated for removal, for the same reasons. Note that this does not affect error_code::message.
  • VMD:
    • The VMD number parsing has been upgraded to support the ability for the end-user to change the number limits in the Preprocessor library.
    • The macro BOOST_VMD_IS_GENERAL_IDENTIFIER has been added to support the parsing of input that represents a preprocessor token which matches the VMD identifier syntax, without having to register the identifier as a specific identifier.
  • TODO

Compilers Tested

Boost's primary test compilers are:

  • TODO

Boost's additional test compilers include:

  • TODO