From 994d667ba9cd1d99a0ac55459a37d6a1fa541af4 Mon Sep 17 00:00:00 2001 From: bneradt Date: Sat, 19 Feb 2022 14:01:25 -0600 Subject: [PATCH] Fix warnings from GCC 12.0.1 This patch fixes warnings generated by GCC 12.0.1. The warnings involved the use of the deprecated std::binary_function, std::unary_function, and std::iterator interfaces. The use of these was considered more confusing than explicitly declaring the associated types. Therefore this patch replaces the use of these deprecated interfaces with the declaration of the associated types. --- example/plugins/cpp-api/boom/boom.cc | 5 ++++- include/tscore/IntrusivePtr.h | 6 +++++- include/tscpp/api/Headers.h | 10 ++++++++-- iocore/net/quic/QUICFrame.h | 5 ++++- lib/swoc/include/swoc/DiscreteRange.h | 6 +++++- src/tscore/HostLookup.cc | 6 +++++- src/wccp/WccpMeta.h | 6 +++++- 7 files changed, 36 insertions(+), 8 deletions(-) diff --git a/example/plugins/cpp-api/boom/boom.cc b/example/plugins/cpp-api/boom/boom.cc index a312e7f2043..7a3a3234d66 100644 --- a/example/plugins/cpp-api/boom/boom.cc +++ b/example/plugins/cpp-api/boom/boom.cc @@ -98,13 +98,16 @@ GlobalPlugin *plugin; // Functor that decides whether the HTTP error can be rewritten or not. // Rewritable codes are: 2xx, 3xx, 4xx, 5xx and 6xx. // 1xx is NOT rewritable! -class IsRewritableCode : public std::unary_function +class IsRewritableCode { // could probably be replaced with mem_ptr_fun().. private: int current_code_; std::string current_code_string_; public: + using argument_type = std::string; + using result_type = bool; + explicit IsRewritableCode(int current_code) : current_code_(current_code) { std::ostringstream oss; diff --git a/include/tscore/IntrusivePtr.h b/include/tscore/IntrusivePtr.h index bfe63a3aee0..70cc671e394 100644 --- a/include/tscore/IntrusivePtr.h +++ b/include/tscore/IntrusivePtr.h @@ -330,9 +330,13 @@ template class IntrusivePtrDefaultPolicy static void finalize(T *t); /// Strict weak order for STL containers. - class Order : public std::binary_function, IntrusivePtr, bool> + class Order { public: + using first_argument_type = IntrusivePtr; + using second_argument_type = IntrusivePtr; + using result_type = bool; + /// Default constructor. Order() {} /// Compare by raw pointer. diff --git a/include/tscpp/api/Headers.h b/include/tscpp/api/Headers.h index 9e6daea8ef4..ffaffde81b5 100644 --- a/include/tscpp/api/Headers.h +++ b/include/tscpp/api/Headers.h @@ -109,12 +109,15 @@ class HeaderField; /** * @brief A header field value iterator iterates through all header fields. */ -class header_field_value_iterator : public std::iterator +class header_field_value_iterator { private: HeaderFieldValueIteratorState *state_; public: + using iterator_category = std::forward_iterator_tag; + using value_type = int; + /** * Constructor for header_field_value_iterator, this shouldn't need to be used directly. * @param bufp the TSMBuffer associated with the headers @@ -169,13 +172,16 @@ class header_field_value_iterator : public std::iterator +class header_field_iterator { private: HeaderFieldIteratorState *state_; header_field_iterator(void *hdr_buf, void *hdr_loc, void *field_loc); public: + using iterator_category = std::forward_iterator_tag; + using value_type = int; + ~header_field_iterator(); /** diff --git a/iocore/net/quic/QUICFrame.h b/iocore/net/quic/QUICFrame.h index 93cd692fc7c..a0b4af9077d 100644 --- a/iocore/net/quic/QUICFrame.h +++ b/iocore/net/quic/QUICFrame.h @@ -204,9 +204,12 @@ class QUICAckFrame : public QUICFrame class AckBlockSection { public: - class const_iterator : public std::iterator + class const_iterator { public: + using iterator_category = std::input_iterator_tag; + using value_type = QUICAckFrame::AckBlock; + const_iterator(uint8_t index, const std::vector *ack_blocks); const QUICAckFrame::AckBlock & diff --git a/lib/swoc/include/swoc/DiscreteRange.h b/lib/swoc/include/swoc/DiscreteRange.h index dd130d86068..503911cacab 100644 --- a/lib/swoc/include/swoc/DiscreteRange.h +++ b/lib/swoc/include/swoc/DiscreteRange.h @@ -319,7 +319,11 @@ template class DiscreteRange { The first pair of elements that are not equal determine the ordering of the overall tuples. */ - struct lexicographic_order : public std::binary_function { + struct lexicographic_order { + using first_argument_type = self_type; + using second_argument_type = self_type; + using result_type = bool; + //! Functor operator. bool operator()(self_type const &lhs, self_type const &rhs) const; }; diff --git a/src/tscore/HostLookup.cc b/src/tscore/HostLookup.cc index b695e0f47d1..440474e9456 100644 --- a/src/tscore/HostLookup.cc +++ b/src/tscore/HostLookup.cc @@ -231,7 +231,11 @@ struct CharIndexBlock { class CharIndex { public: - struct iterator : public std::iterator { + struct iterator { + using iterator_category = std::forward_iterator_tag; + using value_type = HostBranch; + using difference_type = int; + using self_type = iterator; struct State { diff --git a/src/wccp/WccpMeta.h b/src/wccp/WccpMeta.h index 464e8bafcea..11a9b09cf44 100644 --- a/src/wccp/WccpMeta.h +++ b/src/wccp/WccpMeta.h @@ -54,7 +54,11 @@ template struct TEST_IF_TRUE : public TEST_RESULT> }; // Helper for assigning a value to all instances in a container. -template struct TsAssignMember : public std::binary_function { +template struct TsAssignMember { + using first_argument_type = T; + using second_argument_type = A1; + using result_type = R; + R T::*_m; A1 _arg1; TsAssignMember(R T::*m, A1 const &arg1) : _m(m), _arg1(arg1) {}