Skip to content

Prepare for v1.93 - #796

Merged
sdebionne merged 26 commits into
masterfrom
develop
Sep 2, 2026
Merged

Prepare for v1.93#796
sdebionne merged 26 commits into
masterfrom
develop

Conversation

@sdebionne

@sdebionne sdebionne commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Description

Merge to master for 1.93 (deadline Oct. 21)

Tasklist

  • Add release notes
  • Ensure all CI builds pass
  • Review and approve

sdarwin and others added 25 commits March 13, 2026 06:59
Docs: adjust template to support Sphinx 9
- channel.hpp: packed_channel_reference and packed_dynamic_channel_reference
  lost their template parameter names in 5611bd5, where trailing `//`
  comments were turned into \tparam lines. The names sat to the left of
  those comments, so "Defines" and "true" ended up read as names.
- algorithm.hpp: extend_row, extend_col and extend_boundary document
  extend_count and option with \tparam, but both are function arguments.
- ellipse.hpp: midpoint_ellipse_rasterizer documents center and semi_axes;
  the constructor takes center_point and semi_axes_values. Those are the
  names of the members it assigns to.
- threshold.hpp: threshold_binary documents threshold_direction, the
  argument is direction (threshold_direction is its type).
- morphology.hpp: morph documents kernel, the argument is ker_mat.
  morph_impl above it really does take kernel and is left alone.

Comments only.
[doc] Fix Doxygen parameter names that do not match the declarations
A follow-up to #792, same check on the parts of the library it did not
reach.

- read_and_convert_view.hpp: all four Device overloads document \param
  file, the argument is device. The descriptions already say "It's a
  device", so only the names were wrong.
- read_and_convert_image.hpp: the Device overload at 241 documents
  file_name with the string overload's description. The other three
  Device overloads in the same file (47, 134, 189) get this right and
  were used as the model.
- reader_base.hpp: init_image documents @PARAM info, the argument is
  settings.
- extension/io/png/tags.hpp: the image_read_settings constructor
  documents \param gamma, the argument is screen_gamma.
- extension/dynamic_image/algorithm.hpp: the two-argument
  copy_and_convert_pixels documents \tparam Type, the pack is Types.
  The three-argument overload twenty lines above spells it correctly.
- extension/dynamic_image/any_image.hpp: const_view documents \tparam
  Types, the pack is Images. view() right above it is correct.

read_view.hpp, read_image.hpp and the other Device overloads really do
name the argument file, and their \param file is correct. Those are
untouched.

Comments only.
[doc] Fix Doxygen parameter names in io and the extensions
Both read_image_info overloads carry \param tag, but the FormatTag
argument has no name in the declaration and Doxygen cannot attach a
\param to one. Naming it would produce an unused parameter, and every
other FormatTag argument across io/ is unnamed too, so the explanation
moves into the description instead.
[doc] Document the format tag without a \param
Boost build reports "error: No best alternative for libs/gil/test/core/io/path_spec"
step_iterator_adaptor (used by memory_based_step_iterator) defines its own scaled operator- as a member function.

Boost.STLInterfaces' C++20 "concepts" code path (only active at cxxstd≥20) also auto-generates a fallback operator- as a free/hidden-friend template, unconditionally enabled whenever the raw underlying iterator supports subtraction:

For memory_based_step_iterator<pixel*>, base() returns the raw pixel*, which is directly subtractable — so this fallback is always a candidate. Calling b - a requires converting a/b (type Derived) to invoke GIL's member operator (a derived-to-base conversion for the implicit object parameter), while the library's template fallback deduces D1=D2=Derived with zero conversions. An exact match beats a conversion, so GCC silently picks the library's fallback — returning the raw, unscaled pointer difference instead of the step-divided element count. That wrong (too-large) n then feeds directly into std::__copy_m's for (n = last-first; n>0; --n) loop, which walks the iterator far past the end of the buffer with no bounds re-check. It only shows up at cxxstd=20 because that's exactly the threshold where the library's "concepts" overload set activates.
Dropped the using parent_t::operator++/--; lines and added explicit local postfix operators
version `GLIBC_2.28' not found
Also fix the wide-string literal being misdecoded at compile time
refactor: replace Boost.Iterator with Boost.STLInterfaces
@sdebionne sdebionne self-assigned this Aug 28, 2026
@sdebionne sdebionne added this to the Boost 1.93 milestone Aug 28, 2026

@mloskot mloskot left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for taking care of it.

@sdebionne

sdebionne commented Aug 28, 2026

Copy link
Copy Markdown
Contributor Author
  • Fix github pages CI

@sdebionne
sdebionne marked this pull request as ready for review September 1, 2026 14:05
@sdebionne

sdebionne commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

Release notes in boostorg/website-v2-docs#696

We still have time to add more changes if necessary.

@sdebionne
sdebionne merged commit 2808456 into master Sep 2, 2026
59 checks passed
@sdebionne sdebionne mentioned this pull request Sep 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants