vcpkg/ports/qhull/fix-qhullcpp-cpp20-support.patch
Aleksi Sapon ff2d960586
[qhull] Patch for C++20 support (#37765)
This PR adds a patch from upstream that fixes C++20 support. [In C++20,
template parameters from the class template are no longer allowed in
constructors and destructors
declarations](https://eel.is/c++draft/diff.cpp17#class-2). The Qhull C++
headers have a few instances of these, and don't compile under compliant
C++20 (or later). Specifically, since version 11, GCC generates an error
diagnostic.

[While this has been fixed in the
upstream](https://github.com/qhull/qhull/pull/122), the slow Qhull
release cycle means it might be quite a while longer until a new
official release it available. It's already been a year and a half since
the fix, [and the next release is still in
alpha](https://github.com/qhull/qhull/wiki#qhull-81-alpha3-20230102)
with no clear timeline. As C++20 becomes more mainstream, I believe it's
important to ensure support for this library.
2024-03-28 12:41:01 -07:00

94 lines
5.0 KiB
Diff

From bdd99371b995e02d6b39acc93221c477aafd284a Mon Sep 17 00:00:00 2001
From: Jeremy Nimmer <jeremy.nimmer@tri.global>
Date: Thu, 22 Sep 2022 17:39:19 -0700
Subject: [PATCH] Fix build errors when in C++20 mode
---
src/libqhullcpp/QhullLinkedList.h | 12 +++++++-----
src/libqhullcpp/QhullSet.h | 22 +++++++++++-----------
2 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/src/libqhullcpp/QhullLinkedList.h b/src/libqhullcpp/QhullLinkedList.h
index 9f145ee..7c7104d 100644
--- a/src/libqhullcpp/QhullLinkedList.h
+++ b/src/libqhullcpp/QhullLinkedList.h
@@ -62,16 +62,18 @@ private:
#//!\name Constructors
public:
- QhullLinkedList<T>(T b, T e) : begin_node(b), end_node(e) {}
+
+ QhullLinkedList(T b, T e) : begin_node(b), end_node(e) {}
//! Copy constructor copies begin_node and end_node, but not the list elements. Needed for return by value and parameter passing.
- QhullLinkedList<T>(const QhullLinkedList<T> &other) : begin_node(other.begin_node), end_node(other.end_node) {}
+
+ QhullLinkedList(const QhullLinkedList<T> &other) : begin_node(other.begin_node), end_node(other.end_node) {}
//! Copy assignment copies begin_node and end_node, but not the list elements.
- QhullLinkedList<T> & operator=(const QhullLinkedList<T> &other) { begin_node= other.begin_node; end_node= other.end_node; return *this; }
- ~QhullLinkedList<T>() {}
+ QhullLinkedList & operator=(const QhullLinkedList &other) { begin_node= other.begin_node; end_node= other.end_node; return *this; }
+ ~QhullLinkedList() {}
private:
//!disabled since a sentinel must be allocated as the private type
- QhullLinkedList<T>() {}
+ QhullLinkedList() {}
public:
diff --git a/src/libqhullcpp/QhullSet.h b/src/libqhullcpp/QhullSet.h
index f6b248a..803e703 100644
--- a/src/libqhullcpp/QhullSet.h
+++ b/src/libqhullcpp/QhullSet.h
@@ -110,17 +110,17 @@ public:
typedef typename QhullSet<T>::const_iterator ConstIterator;
#//!\name Constructors
- QhullSet<T>(const Qhull &q, setT *s) : QhullSetBase(q, s) { }
- QhullSet<T>(QhullQh *qqh, setT *s) : QhullSetBase(qqh, s) { }
+ QhullSet(const Qhull &q, setT *s) : QhullSetBase(q, s) { }
+ QhullSet(QhullQh *qqh, setT *s) : QhullSetBase(qqh, s) { }
//Conversion from setT* is not type-safe. Implicit conversion for void* to T
//Copy constructor copies pointer but not contents. Needed for return by value.
- QhullSet<T>(const QhullSet<T> &other) : QhullSetBase(other) {}
- QhullSet<T> & operator=(const QhullSet<T> &other) { QhullSetBase::operator=(other); return *this; }
- ~QhullSet<T>() {}
+ QhullSet(const QhullSet &other) : QhullSetBase(other) {}
+ QhullSet<T> & operator=(const QhullSet &other) { QhullSetBase::operator=(other); return *this; }
+ ~QhullSet() {}
private:
//!Disable default constructor. See QhullSetBase
- QhullSet<T>();
+ QhullSet();
public:
#//!\name Conversion
@@ -136,8 +136,8 @@ public:
using QhullSetBase::count;
using QhullSetBase::isEmpty;
// operator== defined for QhullSets of the same type
- bool operator==(const QhullSet<T> &other) const { return qh_setequal(getSetT(), other.getSetT()); }
- bool operator!=(const QhullSet<T> &other) const { return !operator==(other); }
+ bool operator==(const QhullSet &other) const { return qh_setequal(getSetT(), other.getSetT()); }
+ bool operator!=(const QhullSet &other) const { return !operator==(other); }
#//!\name Element access
// Constructs T. Cannot return reference.
@@ -294,9 +294,9 @@ private:
public:
#//!\name Constructors
- QhullSetIterator<T>(const QhullSet<T> &s) : i(s.data()), begin_i(i), end_i(s.endData()), qh_qh(s.qh()) {}
- QhullSetIterator<T>(const QhullSetIterator<T> &o) : i(o.i), begin_i(o.begin_i), end_i(o.end_i), qh_qh(o.qh_qh) {}
- QhullSetIterator<T> &operator=(const QhullSetIterator<T> &o) { i= o.i; begin_i= o.begin_i; end_i= o.end_i; qh_qh= o.qh_qh; return *this; }
+ QhullSetIterator(const QhullSet<T> &s) : i(s.data()), begin_i(i), end_i(s.endData()), qh_qh(s.qh()) {}
+ QhullSetIterator(const QhullSetIterator<T> &o) : i(o.i), begin_i(o.begin_i), end_i(o.end_i), qh_qh(o.qh_qh) {}
+ QhullSetIterator &operator=(const QhullSetIterator &o) { i= o.i; begin_i= o.begin_i; end_i= o.end_i; qh_qh= o.qh_qh; return *this; }
#//!\name ReadOnly
countT countRemaining() { return static_cast<countT>(end_i-i); } // WARN64
--
2.44.0