Re: [libcxx22] fallout

Rafael Sadowski <[email protected]>
Newsgroups gmane.os.openbsd.ports
Message-ID <[email protected]>
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<std::string, std::string> &a,
++			 const std::pair<std::string, std::string> &b) { return cmp(a, b); });
+ 		Dirs->display();
+ 	}
+
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.