Version 1.80.0
August 10th, 2022 21:25 GMT
Documentation
Known Issues
These are patches from library authors which were found too late to be fixed
in the release.
-
Config
-
Support for libcpp15 which removes
std::unary_function
and std::binary_function. Patch.
-
Filesystem
-
Directory iterators may fail to construct for a network share on
Windows prior to 10, see PR#246 and #245.
Patch.
-
On Windows,
weakly_canonical
fails to process paths that start with the "\\?\" prefix,
see #247. Patch.
-
On POSIX systems that don't support
*at APIs, compilation fails due
to a missing include, see #250. Patch.
-
Unordered
-
Containers are not in a valid state after moving, see #139.
Patch.
-
Fix MSVC /RTCc build runtime failures. Patch.
New Libraries
Updated Libraries
-
Asio:
-
Added a deduced trailing return type to all asynchronous operations,
to enable the new form of
async_result
for C++11.
-
Moved
append, prepend, as_tuple,
and deferred to the
boost::asio namespace, and made them compatible
with C++11.
-
Made
experimental::parallel_group
compatible with C++11.
-
Added
buffer()
overloads for contiguous containers, such as std::span.
-
Added the ability for
awaitable<>-based coroutines to directly
co_await operations
that are packaged as function objects.
-
Changed
spawn()
to be a completion token-based asynchronous operation, and added
support for cancellation. The basic_yield_context
token now supports move-only and variadic result types. When targeting
C++11 and later, spawn() and basic_yield_context
are implemented in terms of Boost.Context directly.
-
Added the
is_async_operation
trait and async_operation
concept.
-
Added the
completion_signature_of
trait.
-
Added converting move construction/assignment to posix descriptors,
serial ports, pipes, Windows
object_handle,
Windows stream handles, and Windows random-access handles.
-
Added
release()
member functions to pipes, Windows stream handles, and Windows random-access
handles.
-
Enabled support for
Endpoint
implementations that return void
pointers from their data() member functions, as per the documented
Endpoint type requirements.
-
Removed
all()
and race()
from experimental::promise,
as experimental::parallel_group covers this functionality.
-
Added source locations to exceptions and error codes produced by
the synchronous and asynchronous operations.
-
Fixed compatibility with OpenSSL 3.0.4 and later.
-
Fixed compatibility with with -masm=intel.
-
Explicitly stated that socket
shutdown() calls are thread-safe with respect
to certain other synchronous operations on the same socket.
-
Optimised the move construction of I/O objects where only the executor
type differs.
-
Fixed the detection of
std::invoke_result
for clang/libc++.
-
Fixed an issue where
experimental::parallel_group
initiation incorrectly moved arguments instead of forwarding them.
-
Fixed a sequencing issue in the implementation of
post(), dispatch(), and defer().
-
Fixed the
awaitable<> implementation to propagate
exceptions from awaited initiation functions through the current
completion handler.
-
Fixed detection of
std::aligned_alloc
with gcc 7.
-
Changed to avoid using the soon-to-be-deprecated
std::aligned_storage
on newer compilers.
-
Fixed detection of
std::aligned_alloc
for older Apple platforms.
-
Removed faulty assertions from
experimental::coro
implementation.
-
Added defence against Qt-defined macros when building with Intel
C++.
-
Changed the implementation of the
select_reactor,
on Windows, to ensure that any exception resulting from failure to
recreate its interrupter's sockets will be allowed to propagate out
through io_context::run().
-
Fixed various compiler warnings.
-
Updated all composed operations examples, and the C++11 timeouts
example, to use the new
async_result
form.
-
Added composed operation and coroutine examples for C++20.
-
Consult the Revision
History for further details.
-
Atomic:
-
Improved portability of endianness checks on ARM, AArch32 and AArch64
targets. (#59)
-
Fixed compilation with MSVC 14.0 (Visual Studio 2015) in C++17 mode.
(#61)
-
Filesystem:
-
On Windows, added a fallback implementation for querying file attributes
in case if the file cannot be opened with
ERROR_ACCESS_DENIED
error. This may allow status
and symlink_status
to succeed for system files and directories that are not reparse
points or symlinks. (#234)
-
On Windows, added a workaround for FAT/exFAT filesystems that produce
ERROR_INVALID_PARAMETER
when querying file attributes. This affected status
and symlink_status,
which reported that files do not exist, and directory iterators,
which failed to construct, as well as other dependent operations.
(#236, #237)
-
Worked around a compilation problem on RTEMS.
(PR#240)
-
On Linux, corrected switching to
sendfile
copy_file implementation
if copy_file_range
failed with ENOSYS
in runtime. The sendfile
fallback implementation used to skip the filesystem type check and
could fail for some filesystems.
-
On POSIX systems supporting
openat
and related APIs defined in POSIX.1-2008 and on Windows Vista and
later, improved protection of remove_all
against CVE-2022-21658
that was implemented in the previous release. The previous fix could
still result in removing unintended files in certain
conditions. Other systems remain vulnerable.
-
GIL:
NOTICE:
We are planning BREAKING switch to C++17 as minimum required C++ language
version in one or two releases after Boost 1.80 (#676)
-
Added
-
GSoC 2020: Added Perona-Malik anisotropic diffusion algorithm
(PR#500)
-
GSoC 2020: Added histogram class and related functionality
(PR#499)
-
GSoC 2020: Added histogram equalization feature (PR#514)
-
GSoC 2020: Added histogram matching algorithm (PR#515)
-
GSoC 2020: Added ability to stack images either horizontally
(
hstack) or
vertically (vstack)
(PR#506)
-
GSoC 2020: Added adaptive histogram equalization algorithm
(PR#516)
-
GSoC 2020: Added Standard Hough Transform and circle rasterization
(PR#512)
-
GSoC 2020: Added Bresenham's algorithm for line rasterization
(PR#512)
-
GSoC 2021: Added rotation of image by arbitrary angle around
its center (PR#565)
-
GSoC 2021: Added rasterization support for ellipse based on
"An Efficient Ellipse-Drawing Algorithm" by Jerry
Van Aken (PR#585)
-
Added
image
constructor from compatible view (PR#520)
-
Added inverse function for affine
matrix3x2
(PR#527)
-
Added standard morphological transformations (PR#541)
-
Added
for_each_pixel
overload for any_image
(PR#648)
-
Added C++17 polymorphic memory resource typedefs for
image class (PR#529)
-
Changed
-
BREAKING: The required minimum
C++ version is changed from from C++11 to C++14. Currently,
large parts of GIL still compile with a C++11 compiler. However,
there is no guarantee that it stays that way, and any compilers
that do not support at least C++14 are considered unsupported
as of now.
-
BREAKING:
any_color_converted_view() is deprecated and will be
removed in the next release. Use color_converted_view() instead, which provides the
same feature.
-
BREAKING:
apply_operation
for any_image
is deprecated and will be removed in the next release. Use
variant2::visit instead, which provides
the same feature. (PR#656)
-
Moved numeric extension to core (PR#573)
-
Added support for C++17's
<filesystem>
(PR#636) The availability of the std::filesystem
is detected automatically, unless the BOOST_GIL_IO_USE_BOOST_FILESYSTEM
macro is defined that forces the preference of the Boost.Filesystem.
-
Renamed
pixel_multiply_t
to pixel_multiplies_t
and pixel_divide_t
to pixel_divides_t
(PR#655)
-
Renamed
io/dynamic_io_new.hpp
to io/detail/dynamic.hpp (PR#653)
-
Moved function
construct_matched
into boost::gil::detail
namespace as it was only used by other implementation details
(PR#653)
-
Made
packed_pixel
trivially copyable and assignable (PR#679)
-
Replace deprecated libtiff v4.3 typedefs with C99 fixed-size
integers (PR#685)
-
Removed
-
BREAKING: Removed support
for GCC 5 (PR#572)
-
Removed deprecated.hpp (PR#627)
-
Fixed
-
Fixed conversion from RGB to HSL (PR#505)
-
Fixed conversion from RGB to signed CMYK (PR#522)
-
Removed unnecessary numeric cast in hsv.hpp (PR#530)
-
Fixed default constructor for
homogeneous_color_base
for reference pixel elements (PR#542)
-
Fixed returning reference to local temporary object in
subchroma_image_view (PR#556)
-
Added missing header guards in diffusion.hpp (PR#568)
-
Fixed
any_image_view<>::const_t
(PR#526)
-
Fixed C++20 incompatibilities in I/O extensions (PR#617)
-
Ensured all examples build without errors (PR#628)
-
Fixed
convolve_2d
for images with float32_t
channel model (PR#577)
-
Fixed
for_each_pixel
for non-1d iterable views (PR#621)
-
Fixed:
is_equal_to_sixteen
in PNG I/O was less-than test (PR#650)
-
Re-allow
devicen_t
with two components (PR#654) It was unintentionally removed
in Boost 1.72
-
Fixed memory leak in
image
class for empty dimensions (PR#649)
-
Acknowledgements
-
Cypre55, Samuel Debionne, Mike-Devel, Edward Diener, Peter
Dimov, Omar Emara, Dhruva Gole, Nicolas Herry, Eugene K, Avinal
Kumar, Gaurav Kumar, Marco Langer, Pranam Lashkari, Mateusz
Łoskot, Giovanni Mascellani, Debabrata Mandal, Gopi Krishna
Menon, René Ferdinand Rivera Morell, Felix Morgner, Harshit
Pant, Paul92, André Schröder, Scramjet911, Siddharth, Dirk
Stolle, Prathamesh Tagore, theroyn, Olzhas Zhumabek
-
Graph:
-
Bug fixes:
-
Fix bug in
stoer_wagner_min_cut
where vertices are not merged at the end of each mincut phase
(#286)
-
Fix conversion warning for return type of
strong_components
(#293)
-
Fix compilation failure of
boykov_kolmogorov_max_flow
named parameter overload (#232)
-
General code improvements:
-
Remove redundant call to
combine
in astar_search_no_init_tree
(#260)
-
Remove redundant
child_idx
argument of d_ary_heap_indirect<>::child
(#261)
-
Improve documentation for traversal categories (#303)
-
Acknowledgements
-
Viktor Pti, Sebastian Brockmeyer, Etienne dg
-
Histogram:
-
Fixed segfault in
indexed
when trying to iterate over histogram with axes of zero size (physical
or logical) under certain conditions
-
Removed previously deprecated API
-
class
accumulators::thread_safe:
use accumulators::count<T, true>
-
Methods
accumulators::sum::large
and accumulators::sum::small:
use accumulators::sum::large_part
and accumulators::sum::small_part
-
Type alias
algorithm::reduce_option:
use algorithm::reduce_command
-
Template function
axis::traits::static_options:
use axis::traits::get_options
-
Template function
axis::traits::static_is_inclusive:
use axis::traits::is_inclusive
-
Type alias
indexed::range_iterator:
use indexed::iterator
-
Type alias
indexed::accessor::reference:
use indexed::accessor::const_reference
-
Iterator:
-
For C++11 and later, added support for perfect forwarding of values
written to
function_output_iterator.
(PR#73)
-
Added protection against writing to
function_output_iterator
a result of dereferencing another function_output_iterator.
-
JSON:
-
Added non-const
value::at
overloads.
-
Added the ability to manually choose endianness of the platform.
-
Added
string::subview()
overload.
-
Fixed segfault in
array::erase(it).
-
Fixed low performance of
serialize
on libc++.
-
Fixed ambigious conversion to
std::string_view
on GCC 8.
-
Fixed parsing on big-endian platforms.
-
Fixed handling of comment after trailing comma.
-
LEAF:
-
API breaking change: throw leaf::exception(....) now becomes leaf::throw_exception(....)
-
Fixed a bug in support for a rare build configuration (exception
handling enabled, diagnostics disabled)
-
Using nullptr instead of 0 throughout
-
Fixed pedantic warnings
-
Locale:
-
Deprecated support for C++03 and earlier, C++11 will be required
in the next release
-
Provide
-sICU_LINK_LOCALE
as a temporary replacement for -sICU_LINK which is incompatible
with Boost.Regex. -sICU_LINK_LOCALE and -sICU_LINK
are deprecated and will be replaced by ICU_*_NAME
options to be compatible with Boost.Regex
-
Fix UB/assertion failure in the ICU
collator
implementation when transforming empty strings
-
Fix some issues related to visibility of classes in shared libraries
(Unix only)
-
Fix compatibility with C++20 mode
-
Fix compatibility with
BOOST_USE_WINDOWS_H
-
Fix build failures due to missing includes
-
Handle or suppress many warnings which makes the build log cleaner
-
Log:
-
Bug fixes:
-
Fixed binding incorrect local address in UDP socket-based
syslog_backend
when IPv6 address is used for the syslog server. (#181)
-
Added a workaround for a bug
in libstdc++ from gcc 11.2. When
max_size_decor
was used on a formatting stream, std::codecvt::do_length
incorrectly accessed the input buffer and caused a buffer overflow.
-
See changelog
for more details.
-
Math:
-
Deprecated C++11 support: from 2023
we will require C++14 as a minimum standard. This will mean GCC-5
or MSVC-14.1 as a minimal requirement.
-
Add
constexpr fma support,
see 734.
-
Add support for the Chatterjee Correlation Coefficient, see 770.
-
Added support for the logarithm of the PDF for all the distributions.
-
Improve support for building with no exception or RTTI support.
-
Some minor bug fixes for [sub 1]F[sub 1] corner cases, see 778.
-
Multiprecision:
-
Mark C++11 support as deprecated:
from 2023 we will move to requiring C++14 as a minimum standard level.
That will drop support for GCC versions prior to 5 and MSVC prior
to 14.1.
-
Fix conflict between
boost/cstdfloat.hpp
and this library.
-
Clean up lots of gcc and clang warnings.
-
Fix input streaming of composite types (complex, interval rational)
where there is a trailing delimeter in the stream and no whitespace.
-
Fix
constexpr integer
square root where the input is 1, 2 or 3.
-
Add missing
#include
of <memory> to float128.hpp.
-
Correct 2-arg constructor for class
number
to prevent ambiguity in some cases.
-
Correct and make more consistent behaviour of divide-by-zero in gmp.hpp.
-
Multi-index Containers:
-
Nowide:
-
Major performance improvement for Bulk I/O with files
-
basic_filebuf: Fix
wrong return value of sync
when fflush failed
-
basic_filebuf: Fix
possible undefined behavior in a corner case when nothing was actually
written but buffer is in "write" mode
-
basic_filebuf: Limit
putback of characters (i.e. pbackfail)
only allowing putback of buffered characters (may be only 1 character)
-
Optional:
-
Added specializations for
std::hash<boost::optional<T>>. This is a breaking change
for programs that define such specializations themselves. For more
details see specs.
-
STLInterfaces:
-
Fix #53: "missing 'typename' prior to dependent
type name 'C::const_iterator'"
-
Fix #54: "Concept check fails on .data() of
a view on contiguous iterator_interface instantiations"
-
New additions to make it easy to write views and view adaptors that
work like, and interoperate with, the ones in the standard library:
-
Add workalikes for C++23's
std::bind_back() and std::range_adaptor_closure
for pre-C++23 code.
-
Add templates
closure
and adaptor
to make writing view adaptors easier, following the examples
in P2387.
-
System:
-
When an
error_code
is converted to std::error_code
and then back to error_code,
the original is now restored, if possible.
-
Reworked the conversion from
error_category
to std::error_category to avoid the one-time
allocation that shows up on leak checkers.
-
Added a constructor that allows replacing the source location of
an
error_code, and
a corresponding assign.
-
Added a converting constructor to
result.
-
Unordered:
Major update:
-
Refactor
internal implementation to be dramatically faster
-
Allow
final Hasher and KeyEqual
objects
-
Update documentation, adding benchmark graphs and notes on the new
internal data structures
-
Utility:
-
In
string_view/string_ref, fixed max_size returning incorrect value.
(#91)
-
Removed
noexcept specifier
from string_view::compare
as it may throw on some input arguments. (#94)
-
In
string_view/string_ref, added support for calling
substr with no arguments.
(#96)
-
Added
string_view::contains
methods that were introduced in C++23. (#93)
-
In
string_view, added
asserts in remove_prefix/remove_suffix methods to enforce
the precondition that the prefix/suffix length does not exceed the
string view size. The previous (undocumented) behavior of silently
clamping the prefix/suffix length is deprecated and will be removed
in a future release. (#92)
-
Wave:
Fixed bugs:
-
#24: Line numbers wrong after conditional section
-
#160: one test fails with error C2660 and error C2440 under
msvc /permissive- mode
-
#161: BOOST_WAVE_THROW_NAME_CTX does not result in a context
callback and always throws
-
#162: When Boost headers are included in the preprocessed
translation unit, Wave fails in boost/integer.hpp(99)
Updated Tools
Compilers Tested
Boost's primary test compilers are:
Boost's primary test compilers are:
-
Linux:
-
Clang: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0, 13.0.0, 14.0.0
-
Clang, C++11: 3.4, 11.0.0, 13.0.0, 14.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
-
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
-
Clang, C++20: 11.0.0, 12.0.0, 13.0.0, 14.0.0
-
GCC: 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: 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, Michael Caisse and Glen Fernandes managed this release.