diff --git a/dev-cpp/htmlcxx/files/htmlcxx-0.87-c++20.patch b/dev-cpp/htmlcxx/files/htmlcxx-0.87-c++20.patch
new file mode 100644
index 0000000000000..4e8a7aff0c98d
--- /dev/null
+++ b/dev-cpp/htmlcxx/files/htmlcxx-0.87-c++20.patch
@@ -0,0 +1,78 @@
+https://sourceforge.net/p/htmlcxx/patches/9/
+
+Author: Frantisek Boranek
+Date: Thu, 6 Oct 2022 22:39:21 +0200
+Subject: [PATCH] fix compiling with c++20
+
+The second parameter in function allocate() was removed in C++20 standard.
+These changes are backward compatible. Prior standard will use these:
+* < C++17: pointer allocate( size_type n, const void * hint = 0 ); // (until C++17)
+* < C++20: T* allocate( std::size_t n ); // (since C++17)
+* = C++20: [[nodiscard]] constexpr T* allocate( std::size_t n );
+--- a/html/tree.h
++++ b/html/tree.h
+@@ -416,8 +416,8 @@ tree::~tree()
+ template
+ void tree::head_initialise_()
+ {
+- head = alloc_.allocate(1,0); // MSVC does not have default second argument
+- feet = alloc_.allocate(1,0);
++ head = alloc_.allocate(1);
++ feet = alloc_.allocate(1);
+
+ head->parent=0;
+ head->first_child=0;
+@@ -672,7 +672,7 @@ iter tree::append_child(iter position)
+ {
+ assert(position.node!=head);
+
+- tree_node* tmp = alloc_.allocate(1,0);
++ tree_node* tmp = alloc_.allocate(1);
+ kp::constructor(&tmp->data);
+ tmp->first_child=0;
+ tmp->last_child=0;
+@@ -700,7 +700,7 @@ iter tree::append_child(iter position, const T& x)
+ // the API change.
+ assert(position.node!=head);
+
+- tree_node* tmp = alloc_.allocate(1,0);
++ tree_node* tmp = alloc_.allocate(1);
+ kp::constructor(&tmp->data, x);
+ tmp->first_child=0;
+ tmp->last_child=0;
+@@ -756,7 +756,7 @@ iter tree::insert(iter position, const T& x)
+ position.node=feet; // Backward compatibility: when calling insert on a null node,
+ // insert before the feet.
+ }
+- tree_node* tmp = alloc_.allocate(1,0);
++ tree_node* tmp = alloc_.allocate(1);
+ kp::constructor(&tmp->data, x);
+ tmp->first_child=0;
+ tmp->last_child=0;
+@@ -776,7 +776,7 @@ iter tree::insert(iter position, const T& x)
+ template
+ typename tree::sibling_iterator tree::insert(sibling_iterator position, const T& x)
+ {
+- tree_node* tmp = alloc_.allocate(1,0);
++ tree_node* tmp = alloc_.allocate(1);
+ kp::constructor(&tmp->data, x);
+ tmp->first_child=0;
+ tmp->last_child=0;
+@@ -804,7 +804,7 @@ template
+ template
+ iter tree::insert_after(iter position, const T& x)
+ {
+- tree_node* tmp = alloc_.allocate(1,0);
++ tree_node* tmp = alloc_.allocate(1);
+ kp::constructor(&tmp->data, x);
+ tmp->first_child=0;
+ tmp->last_child=0;
+@@ -864,7 +864,7 @@ iter tree::replace(iter position, const iterator_base& f
+
+ // replace the node at position with head of the replacement tree at from
+ erase_children(position);
+- tree_node* tmp = alloc_.allocate(1,0);
++ tree_node* tmp = alloc_.allocate(1);
+ kp::constructor(&tmp->data, (*from));
+ tmp->first_child=0;
+ tmp->last_child=0;
diff --git a/dev-cpp/htmlcxx/htmlcxx-0.87.ebuild b/dev-cpp/htmlcxx/htmlcxx-0.87-r1.ebuild
similarity index 89%
rename from dev-cpp/htmlcxx/htmlcxx-0.87.ebuild
rename to dev-cpp/htmlcxx/htmlcxx-0.87-r1.ebuild
index a1ac35ac47fea..00352fd75bc33 100644
--- a/dev-cpp/htmlcxx/htmlcxx-0.87.ebuild
+++ b/dev-cpp/htmlcxx/htmlcxx-0.87-r1.ebuild
@@ -1,7 +1,7 @@
-# Copyright 1999-2024 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
-EAPI=7
+EAPI=8
inherit multilib-minimal
@@ -15,6 +15,7 @@ IUSE="static-libs"
PATCHES=(
"${FILESDIR}"/${P}-c++17.patch
+ "${FILESDIR}"/${P}-c++20.patch
)
ECONF_SOURCE="${S}"