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

Version 1.72.0 beta 1

November 21st, 2019 07:46 GMT

Documentation

Beta Downloads
PlatformFileSHA256 Hash
unixboost_1_72_0_b1.tar.bz26c85a7aed198757f5e4be66a971ae90a25c4ce32703fecfb5bb19019bd80947c
boost_1_72_0_b1.tar.gzbe4a3fdaa84d5a8b25863651043308e02645f3fbf772b7623ee6462fb1dbad09
windowsboost_1_72_0_b1.7z5a6b5cbd27b8ca0c7741b715e022a3bf05aecbb1e73dc72dd82eef9622374bd5
boost_1_72_0_b1.zip95181a5f3de0078b8fc031f63a4dc8be4d70b7d3d5cde3b266d2cd98bd4b61b0

New Libraries

  • TODO

Updated Libraries

  • Atomic:
    • Added a workaround for __float128 not being considered as a floating point type by some versions of libstdc++.
    • Improved compatibility with clang-win compiler.
  • Beast:
    • This is a maintenance update containing bug fixes, and updates to use the new features delivered in Boost.Asio.
    • We'd love to know how you or your company use Beast, consider adding an entry to the Companies and Individuals Using Beast list.
    • See the full Release Notes for a complete list of changes.
  • Circular Buffer:
    • Fix issue #29: max_size() now takes the allocator's max_size() into account. (Glen Fernandes)
  • Context:
    • architecture s390x supported
    • execution_context removed
  • Endian:
    • Made endian_reverse, conditional_reverse and \*\_to_* constexpr on GCC and Clang
    • Added convenience load and store functions
    • Added floating point convenience typedefs
    • Added a non-const overload of data(); changed its return type to unsigned char*
    • Added __int128 support to endian_reverse when available
    • Added a convenience header boost/endian.hpp
  • Filesystem:
    • Extracted filesystem_error to exception.hpp; file_status and associated enums and functions to file_status.hpp; directory_entry, directory_iterator and recursive_directory_iterator to directory.hpp.
    • Deprecated: For backward compatibility operations.hpp still includes the new headers exception.hpp, file_status.hpp and directory.hpp, unless BOOST_FILESYSTEM_NO_DEPRECATED macro is defined. These implicit includes are considered deprecated and will be removed in a future release. Users are encouraged to include the new headers directly or include filesystem.hpp.
    • The filesystem_error exception is now implemented in the compiled library of Boost.Filesystem. Users may need to add linking with Boost.Filesystem library in their projects.
    • On POSIX.1-2008 platforms, use utimensat instead of utime. utime is declared obsolete in POSIX.1-2008 and can be disabled e.g. in uClibc-ng. (PR#115)
    • directory_iterator is now left in the end state on memory allocation errors.
    • In directory_iterator on POSIX systems, support for readdir/readdir_r has been reworked to avoid memory allocations for dirent structures when readdir is used. This reduces memory consumption and eliminates the possibility of buffer overruns in case if readdir produces a very long directory name.
    • On Windows, use Boost.WinAPI to select the target Windows version.
    • New: Added directory_options enum, which reflects the same named enum from C++20. The enum is supported in directory_iterator and recursive_directory_iterator to customize iteration behavior. In particular, the iterators now support skipping directories that can't be opened due to insufficient permissions. The symlink_option enum is now deprecated and should be replaced with directory_options.
    • By default, recursive_directory_iterator is now reset to the end state in case of errors, as required by C++20. (#112)
    • New: Added directory_options::pop_on_error option, which configures recursive_directory_iterator so that it attempts to recover from iteration errors by repeatedly invoking pop() until it succeeds or the end state is reached. (#113)
    • New: Added directory_options::skip_dangling_symlinks option, which configures recursive_directory_iterator so that it doesn't follow dangling directory symlinks and continues iteration instead of reporting an error.
    • Deprecated: The following members of recursive_directory_iterator are now marked as deprecated: level(), no_push_pending(), no_push_request(), no_push(). Users are advised to replace their use with the standard counterparts: depth(), recursion_pending(), disable_recursion_pending(). Note that recursion_pending() has the opposite meaning compared to no_push_pending() and no_push_request(). Deprecated methods will be removed in a future release.
    • Fixed path::lexically_relative (and any dependent algorithms) to correctly handle empty, dot and dot-dot path elements in its argument. The behavior is made closer to C++17 std::path::lexically_relative in that empty and dot path elements are ignored and dot-dot path elements are accounted by decreasing the number of dot-dot path elements to generate in the resulting relative path. (#76)
  • Functional/Factory:
    • Glen Fernandes rewrote the implementations of factory and value_factory to provide the following features:
      • Support r-value arguments when possible
      • Support arbitrary number of arguments via variadic templates when possible
      • Support allocators that are final
      • Support allocators that use fancy pointers
      • Support for disabled exceptions (BOOST_NO_EXCEPTIONS)
      • Improved compilation times
    • The following features have been removed:
      • Increasing limits for C++03 compilers through BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY
      • Using boost::none_t in place of void through BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_T
  • GIL:
    • Added
      • GSoC 2019: Lanczos resampling for image down scaling (PR #309).
      • GSoC 2019: Methods for binary thresholding, inverted binary thresholding and truncation thresholding (PR #313).
      • GSoC 2019: Otsu thresholding method (PR #314).
      • GSoC 2019: Adaptive thresholding using mean or gaussian-weighted sum of the neighbourhood area (PR #315).
      • GSoC 2019: Harris response calculation (corner detector without non-maximum filtering) (PR #350).
      • GSoC 2019: Hessian corner detector (PR #364).
      • GSoC 2019: Types for defining 2D kernel, kernel_2d and kernel_2d_fixed, in Numeric extension (PR #361).
      • GSoC 2019: Implementation of 2D convolution as new function convolve_2d (PR #367).
      • GSoC 2019: Box filtering using the average filter (PR #383).
      • GSoC 2019: Blur function based on normalized mean filter (PR #383).
      • GSoC 2019: Sobel and Scharr operators (PR #392).
      • GSoC 2019: Median filter to remove noise from image (PR #393).
      • Continued adding new test cases and significantly improved overall test coverage.
      • Documented purpose of cached_location_t (PR #287).
      • Function convolve_1d in Numeric extension for convenient use of convolve_rows and convolve_cols (PR #347) and PR #367).
      • Function extend_boundary in Numeric extension to perform image boundary extension (PR #386).
      • Project release notes maintained in Markdown file RELEASES.md (PR #404).
    • Changed
      • Move all tests, core features and extensions, inside test/ directory (PR #302).
    • Removed
      • Dropped support for GCC <= 4.8 (PR #296).
      • Replace Boost.MPL with Boost.MP11 (PR #274).
      • Removed use of Boost.TypeTraits (PR #274).
    • Fixed
      • Undetermined value of default-initialized channel and pixel objects (PR #273).
      • Undefined behaviour due to std::is_trivially_default_constructible specializations (PR #284).
      • Crash when reading PNG files with an invalid header (PR #385).
      • Applied the Rule of Three for numerous types.
      • Removed uses of deprecated implicit definition of defaulted copy assignment operator or copy constructor.
  • Histogram:
    • Several new features and performance improvements, some bug-fixes
    • See the full Release Notes for a complete list of changes
  • Log:
    • Improved compatibility with clang-win compiler.
  • MPI:
    • Documentation clarifications.
    • Fixed scatterv bug when using explicit input buffer offsets.
    • Enable usage of MPI_Probe and friend with Intel MPI >= 2019.4
    • Symbol visibility on Windows
  • Outcome:
    • Enhancements:
      • Standalone outcome is now make install-able, and cmake find_package() can find it. Note that you must separately install and find_package() Outcome's dependency, quickcpplib, else find_package() of Outcome will fail.
      • The git submodule mechanism used by standalone Outcome of specifying dependent libraries has been replaced with a cmake superbuild of dependencies mechanism instead. Upon cmake configure, an internal copy of quickcpplib will be git cloned, built and installed into the build directory from where an internal find_package() uses it. This breaks the use of the unconfigured Outcome repo as an implementation of Outcome, one must now do one of: 1. Add Outcome as subdirectory to cmake build. 2. Use cmake superbuild (i.e. ExternalProject_Add()) to build and install Outcome into a local installation. 3. Use one of the single header editions.
      • For standalone Outcome, the current compiler is now checked for whether it will compile code containing C++ Concepts, and if it does, all cmake consumers of Outcome will enable C++ Concepts. Set the cmake variable CXX_CONCEPTS_FLAGS to an empty string to prevent auto detection and enabling of C++ Concepts support occurring.
      • OUTCOME_TRY operation now hints to the compiler that operation will be successful. [P1886 Error speed benchmarking](https://wg21.link/P1886) showed that there is considerable gain in very small functions by hinting to the compiler whether the expression is expected to be successful or not. OUTCOME_TRY previously did not hint to the compiler at all, but now it does. A new suite of macros OUTCOME_TRY_FAILURE_LIKELY hint to the compiler that failure is expected. If you wish to return to the previously unhinted behaviour, define OUTCOME_TRY_LIKELY(expr) to (!!expr).
      • #199 Support for C++ Coroutines has been added. This comes in two parts, firstly there is now an OUTCOME_CO_TRY() operation suitable for performing the TRY operation from within a C++ Coroutine. Secondly, in the header outcome/coroutine_support.hpp there are implementations of eager<OutcomeType> and lazy<OutcomeType> which let you more naturally and efficiently use basic_result or basic_outcome from within C++ Coroutines -- specifically, if the result or outcome will construct from an exception pointer, exceptions thrown in the coroutine return an errored or excepted result with the thrown exception instead of throwing the exception through the coroutine machinery (which in current compilers, has a high likelihood of blowing up the program). Both eager<T> and lazy<T> can accept any T as well. Both have been tested and found working on VS2019 and clang 9.
      • #210 make_error_code() and make_exception_ptr() are now additionally considered for compatible copy and move conversions for basic_result<>. This lets you construct a basic_result<T, E> into a basic_result<T, error_code>, where E is a custom type which has implemented the ADL discovered free function error_code make_error_code(E), but is otherwise unrelated to error_code. The same availability applies for exception_ptr with make_exception_ptr() being the ADL discovered free function. basic_outcome<> has less support for this than basic_result<> in order to keep constructor count down, but it will accept via this mechanism conversions from basic_result<> and failure_type<>.
    • Bug fixes:
      • #184 The detection of [[nodiscard]] support in the compiler was very mildly broken.
  • PolyCollection:
    • Maintenance work.
  • Preprocessor:
    • Topic added which discusses emptiness
    • Support for the C++20 __VA_OPT__ construct
      • BOOST_PP_VARIADIC_HAS_OPT whether __VA_OPT__ is supported at the C++20 level
      • BOOST_PP_CHECK_EMPTY test for emptiness using __VA_OPT__ at the C++20 level
      • BOOST_PP_VA_OPT more flexible alternative to __VA_OPT__ at the C++20 level
  • Smart Pointers:
    • Implemented allocate_unique for scalars and arrays. (Glen Fernandes)
  • VMD:
    • BOOST_VMD_IS_EMPTY updated to use __VA_OPT__ at the C++20 level has 100% reliability

Compilers Tested

Boost's primary test compilers are:

  • Linux:
    • Clang: 3.0, 4.0.1, 6.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0
    • 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.2, 6.0.1, 7.0.0, 8.0.0
    • Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0
    • GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
    • GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1
    • GCC, C++17: 7.3.0, 8.0.1
    • Intel, C++14: 18.0
  • OS X:
    • Apple Clang: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++17: 9.1.0, 10.0.0
    • Apple Clang, C++1z: 9.0.0
    • Apple Clang, C++2a: 10.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
    • GCC, C++17: 7.1.0, 7.2.0, 7.3.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • FreeBSD:
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0

Boost's additional test compilers include:

  • Linux:
    • Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0
    • 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.2, 6.0.1, 7.0.0, 8.0.0
    • Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
    • GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0
    • GCC, C++17: 7.3.0, 8.0.1
    • Intel, C++14: 18.0
  • OS X:
    • Apple Clang: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++17: 9.1.0, 10.0.0
    • Apple Clang, C++1z: 9.0.0
    • Apple Clang, C++2a: 10.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
    • GCC, C++17: 7.1.0, 7.2.0, 7.3.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • FreeBSD:
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0

Acknowledgements

Marshall Clow and Michael Caisse managed this release.