This is an automated email from the ASF dual-hosted git repository.

alexey pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git

commit 4dc4100fe5cf994cccb5d87cc398e79dde038686
Author: Alexey Serbin <ale...@apache.org>
AuthorDate: Mon Mar 25 21:30:20 2024 -0700

    [gutil] fix compilation with clang 15
    
    std::{binary,unary}_function have been deprecated since C++11 and
    removed in C++17 [1], and it seems that CLANG 15 which comes with
    Xcode 15.3 on macOS enforces this particular part of the C++17 standard.
    
    In this instance, it's easy to address the issue because nothing
    essential was used from std::unary_function and std::binary_function
    but just typedefs which are no longer needed by the new standard library
    anyway.  Since Kudu switched to C++17 a long time ago [2], the solution
    is to stop inheriting from the deprecated classes.
    
    [1] https://en.cppreference.com/w/cpp/utility/functional/unary_function
    [2] 
https://github.com/apache/kudu/commit/e432e637e282ba87d41c02088a801f0838571edc
    
    Change-Id: I3329427c3babd57418c83ab2401b7c4d29e14020
    Reviewed-on: http://gerrit.cloudera.org:8080/21206
    Tested-by: Alexey Serbin <ale...@apache.org>
    Reviewed-by: Mahesh Reddy <mre...@cloudera.com>
    Reviewed-by: Abhishek Chennaka <achenn...@cloudera.com>
---
 src/kudu/gutil/stl_util.h               | 16 +++++-----------
 src/kudu/gutil/strings/human_readable.h |  6 ++----
 src/kudu/gutil/strings/numbers.h        | 12 ++++--------
 src/kudu/gutil/strings/util.h           |  4 ++--
 4 files changed, 13 insertions(+), 25 deletions(-)

diff --git a/src/kudu/gutil/stl_util.h b/src/kudu/gutil/stl_util.h
index 1713323db..50f9bf327 100644
--- a/src/kudu/gutil/stl_util.h
+++ b/src/kudu/gutil/stl_util.h
@@ -682,8 +682,7 @@ bool STLIncludes(const SortedSTLContainerA &a,
 // the contents of an STL map. For other sample usage, see the unittest.
 
 template<typename Pair, typename UnaryOp>
-class UnaryOperateOnFirst
-    : public std::unary_function<Pair, typename UnaryOp::result_type> {
+class UnaryOperateOnFirst {
  public:
   UnaryOperateOnFirst() {
   }
@@ -705,8 +704,7 @@ UnaryOperateOnFirst<Pair, UnaryOp> UnaryOperate1st(const 
UnaryOp& f) {
 }
 
 template<typename Pair, typename UnaryOp>
-class UnaryOperateOnSecond
-    : public std::unary_function<Pair, typename UnaryOp::result_type> {
+class UnaryOperateOnSecond {
  public:
   UnaryOperateOnSecond() {
   }
@@ -728,8 +726,7 @@ UnaryOperateOnSecond<Pair, UnaryOp> UnaryOperate2nd(const 
UnaryOp& f) {
 }
 
 template<typename Pair, typename BinaryOp>
-class BinaryOperateOnFirst
-    : public std::binary_function<Pair, Pair, typename BinaryOp::result_type> {
+class BinaryOperateOnFirst {
  public:
   BinaryOperateOnFirst() {
   }
@@ -753,8 +750,7 @@ BinaryOperateOnFirst<Pair, BinaryOp> BinaryOperate1st(const 
BinaryOp& f) {
 }
 
 template<typename Pair, typename BinaryOp>
-class BinaryOperateOnSecond
-    : public std::binary_function<Pair, Pair, typename BinaryOp::result_type> {
+class BinaryOperateOnSecond {
  public:
   BinaryOperateOnSecond() {
   }
@@ -790,9 +786,7 @@ BinaryOperateOnSecond<Pair, BinaryOp> 
BinaryOperate2nd(const BinaryOp& f) {
 // F has to be a model of AdaptableBinaryFunction.
 // G1 and G2 have to be models of AdabtableUnaryFunction.
 template<typename F, typename G1, typename G2>
-class BinaryComposeBinary : public std::binary_function<typename 
G1::argument_type,
-                                                        typename 
G2::argument_type,
-                                                        typename 
F::result_type> {
+class BinaryComposeBinary {
  public:
   BinaryComposeBinary(F f, G1 g1, G2 g2) : f_(f), g1_(g1), g2_(g2) { }
 
diff --git a/src/kudu/gutil/strings/human_readable.h 
b/src/kudu/gutil/strings/human_readable.h
index a19b9e797..07c848953 100644
--- a/src/kudu/gutil/strings/human_readable.h
+++ b/src/kudu/gutil/strings/human_readable.h
@@ -75,16 +75,14 @@ class HumanReadableNumBytes {
 
 
 // See documentation at HumanReadableNumBytes::LessThan().
-struct humanreadablebytes_less
-    : public std::binary_function<const std::string&, const std::string&, 
bool> {
+struct humanreadablebytes_less {
   bool operator()(const std::string& a, const std::string &b) const {
     return HumanReadableNumBytes::LessThan(a, b);
   }
 };
 
 // See documentation at HumanReadableNumBytes::LessThan().
-struct humanreadablebytes_greater
-    : public std::binary_function<const std::string&, const std::string&, 
bool> {
+struct humanreadablebytes_greater {
   bool operator()(const std::string& a, const std::string &b) const {
     return HumanReadableNumBytes::LessThan(b, a);
   }
diff --git a/src/kudu/gutil/strings/numbers.h b/src/kudu/gutil/strings/numbers.h
index f85889160..b3bc3da82 100644
--- a/src/kudu/gutil/strings/numbers.h
+++ b/src/kudu/gutil/strings/numbers.h
@@ -332,29 +332,25 @@ bool AutoDigitLessThan(const char* a, int alen,
 bool StrictAutoDigitLessThan(const char* a, int alen,
                              const char* b, int blen);
 
-struct autodigit_less
-  : public std::binary_function<const std::string&, const std::string&, bool> {
+struct autodigit_less {
   bool operator()(const std::string& a, const std::string& b) const {
     return AutoDigitLessThan(a.data(), a.size(), b.data(), b.size());
   }
 };
 
-struct autodigit_greater
-  : public std::binary_function<const std::string&, const std::string&, bool> {
+struct autodigit_greater {
   bool operator()(const std::string& a, const std::string& b) const {
     return AutoDigitLessThan(b.data(), b.size(), a.data(), a.size());
   }
 };
 
-struct strict_autodigit_less
-  : public std::binary_function<const std::string&, const std::string&, bool> {
+struct strict_autodigit_less {
   bool operator()(const std::string& a, const std::string& b) const {
     return StrictAutoDigitLessThan(a.data(), a.size(), b.data(), b.size());
   }
 };
 
-struct strict_autodigit_greater
-  : public std::binary_function<const std::string&, const std::string&, bool> {
+struct strict_autodigit_greater {
   bool operator()(const std::string& a, const std::string& b) const {
     return StrictAutoDigitLessThan(b.data(), b.size(), a.data(), a.size());
   }
diff --git a/src/kudu/gutil/strings/util.h b/src/kudu/gutil/strings/util.h
index e7f9c496d..355659de4 100644
--- a/src/kudu/gutil/strings/util.h
+++ b/src/kudu/gutil/strings/util.h
@@ -260,7 +260,7 @@ char* AdjustedLastPos(const char* str, char separator, int 
n);
 // Compares two char* strings for equality. (Works with NULL, which compares
 // equal only to another NULL). Useful in hash tables:
 //    hash_map<const char*, Value, hash<const char*>, streq> ht;
-struct streq : public std::binary_function<const char*, const char*, bool> {
+struct streq {
   bool operator()(const char* s1, const char* s2) const {
     return ((s1 == 0 && s2 == 0) ||
             (s1 && s2 && *s1 == *s2 && strcmp(s1, s2) == 0));
@@ -270,7 +270,7 @@ struct streq : public std::binary_function<const char*, 
const char*, bool> {
 // Compares two char* strings. (Works with NULL, which compares greater than 
any
 // non-NULL). Useful in maps:
 //    map<const char*, Value, strlt> m;
-struct strlt : public std::binary_function<const char*, const char*, bool> {
+struct strlt {
   bool operator()(const char* s1, const char* s2) const {
     return (s1 != s2) && (s2 == 0 || (s1 != 0 && strcmp(s1, s2) < 0));
   }

Reply via email to