From: Rafael Sadowski Subject: Re: [libcxx22] fallout To: Theo Buehler Cc: ports@openbsd.org Date: Tue, 25 Aug 2026 21:52:22 +0200 On Fri Aug 21, 2026 at 02:15:34PM +0200, Theo Buehler wrote: > Here is the directly libcxx22-related breakage of my first bulk. > > There may be a few more because mono got stuck with a weird error. And > I did not try to build the V8 monsters: codex, deno, chromiums and a few > others because my machine isn't beefy enough. I don't think anything > super important is directly affected or hiding behind those. So as far > as ports are concerned, I think we can land libcxx22 whenever we want: > > audio/ncmpcpp > audio/rubberband > cad/freecad > databases/mongodb/44 > games/cataclysm-dda > games/dxx-rebirth > games/flightgear/base > games/keeperrl > mail/kopano/core > misc/subsurface > shells/fish/v3 > textproc/lttoolbox > > There are basically two main classes of failures: comparison operators > and locale things and a few odd ones like fish/v3 and > > audio/ncmpcpp > /usr/include/c++/v1/__algorithm/sift_down.h:49:39: error: no matching function for call to object of type 'LocaleBasedSorting' > 49 | } else if ((__child + 1) < __len && __comp(__first[__child], __first[__child + 1])) { > | ^~~~~~ > The lambdas are more or less a workaround from me. I think, the much cleaner fix would be to teach LocaleBasedSorting to handle all this, but that means digging even depper into the Boost lib. I don't want go this way. Anyone? diff --git a/audio/ncmpcpp/patches/patch-src_screens_sel_items_adder_cpp b/audio/ncmpcpp/patches/patch-src_screens_sel_items_adder_cpp new file mode 100644 index 00000000000..8f4ca627847 --- /dev/null +++ b/audio/ncmpcpp/patches/patch-src_screens_sel_items_adder_cpp @@ -0,0 +1,16 @@ +Fix build with libc++22: Boost operator[] proxy breaks template argument +deduction in LocaleBasedSorting. +Index: src/screens/sel_items_adder.cpp +--- src/screens/sel_items_adder.cpp.orig ++++ src/screens/sel_items_adder.cpp +@@ -254,7 +254,9 @@ void SelectedItemsAdder::populatePlaylistSelector(Base + )); + }; + std::sort(m_playlist_selector.beginV()+begin, m_playlist_selector.endV(), +- LocaleBasedSorting(std::locale(), Config.ignore_leading_the)); ++ [cmp = LocaleBasedSorting(std::locale(), Config.ignore_leading_the)] ++ (const Entry &a, const Entry &b) { return cmp(a, b); }); ++ + if (begin < m_playlist_selector.size()) + m_playlist_selector.addSeparator(); + } diff --git a/audio/ncmpcpp/patches/patch-src_screens_tag_editor_cpp b/audio/ncmpcpp/patches/patch-src_screens_tag_editor_cpp new file mode 100644 index 00000000000..24a6fa9d851 --- /dev/null +++ b/audio/ncmpcpp/patches/patch-src_screens_tag_editor_cpp @@ -0,0 +1,16 @@ +Fix build with libc++22: Boost operator[] proxy breaks template argument +deduction in LocaleBasedSorting. +Index: src/screens/tag_editor.cpp +--- src/screens/tag_editor.cpp.orig ++++ src/screens/tag_editor.cpp +@@ -289,7 +289,9 @@ void TagEditor::update() + Dirs->highlight(Dirs->size()-1); + }; + std::sort(Dirs->beginV()+1, Dirs->endV(), +- LocaleBasedSorting(std::locale(), Config.ignore_leading_the)); ++ [cmp = LocaleBasedSorting(std::locale(), Config.ignore_leading_the)] ++ (const std::pair &a, ++ const std::pair &b) { return cmp(a, b); }); + Dirs->display(); + } +