5104bd
--- ceph-16.2.7/src/include/buffer.h.orig	2022-01-17 12:17:19.193356237 -0500
5104bd
+++ ceph-16.2.7/src/include/buffer.h	2022-01-17 12:17:58.599639592 -0500
5104bd
@@ -38,6 +38,7 @@
5104bd
 # include <sys/mman.h>
5104bd
 #endif
5104bd
 
5104bd
+#include <memory>
5104bd
 #include <iosfwd>
5104bd
 #include <iomanip>
5104bd
 #include <list>
5104bd
--- ceph-16.2.7/src/common/LogEntry.cc.orig	2022-01-17 13:52:10.799134159 -0500
5104bd
+++ ceph-16.2.7/src/common/LogEntry.cc	2022-01-17 13:52:47.244469274 -0500
5104bd
@@ -183,7 +183,7 @@
5104bd
       return "crit";
5104bd
     default:
5104bd
       ceph_abort();
5104bd
-      return 0;
5104bd
+      return "";
5104bd
   }
5104bd
 }
5104bd
 
5104bd
--- ceph-16.2.7/src/common/dout.h.orig	2022-01-18 08:58:11.805226954 -0500
5104bd
+++ ceph-16.2.7/src/common/dout.h	2022-01-19 08:06:23.987388663 -0500
5104bd
@@ -99,11 +99,15 @@
5104bd
 template<typename T>
5104bd
 struct dynamic_marker_t {
5104bd
   T value;
5104bd
-  operator T() const { return value; }
5104bd
+  // constexpr ctor isn't needed as it's an aggregate type
5104bd
+  constexpr operator T() const { return value; }
5104bd
 };
5104bd
 
5104bd
 template<typename T>
5104bd
-dynamic_marker_t<T> need_dynamic(T&& t) {
5104bd
+constexpr dynamic_marker_t<T> need_dynamic(T&& t) {
5104bd
+  // deprecated in C++17 but that's fine for testing
5104bd
+  static_assert(std::is_literal_type_v<T>);
5104bd
+  static_assert(std::is_literal_type_v<dynamic_marker_t<T>>);
5104bd
   return dynamic_marker_t<T>{ std::forward<T>(t) };
5104bd
 }
5104bd
 
5104bd
--- ceph-16.2.7/src/test/librados/tier_cxx.cc.orig	2022-01-19 09:30:47.209459506 -0500
5104bd
+++ ceph-16.2.7/src/test/librados/tier_cxx.cc	2022-01-19 10:02:47.783240298 -0500
5104bd
@@ -114,7 +114,7 @@
5104bd
 #include "rgw/rgw_common.h"
5104bd
 
5104bd
 void check_fp_oid_refcount(librados::IoCtx& ioctx, std::string foid, uint64_t count,
5104bd
-			   std::string fp_algo = NULL)
5104bd
+			   std::string fp_algo = "")
5104bd
 {
5104bd
   bufferlist t;
5104bd
   int size = foid.length();
5104bd
@@ -142,7 +142,7 @@
5104bd
   ASSERT_LE(count, refs.count());
5104bd
 }
5104bd
 
5104bd
-string get_fp_oid(string oid, std::string fp_algo = NULL)
5104bd
+string get_fp_oid(string oid, std::string fp_algo = "")
5104bd
 {
5104bd
   if (fp_algo == "sha1") {
5104bd
     unsigned char fingerprint[CEPH_CRYPTO_SHA1_DIGESTSIZE + 1];
5104bd
--- ceph-16.2.7/src/test/test_trans.cc.orig	2022-01-19 13:24:33.460008897 -0500
5104bd
+++ ceph-16.2.7/src/test/test_trans.cc	2022-01-19 13:24:58.211554005 -0500
5104bd
@@ -51,7 +51,7 @@
5104bd
   cout << "#dev " << filename << std::endl;
5104bd
   cout << "#mb " << mb << std::endl;
5104bd
 
5104bd
-  ObjectStore *fs = new FileStore(cct.get(), filename, NULL);
5104bd
+  ObjectStore *fs = new FileStore(cct.get(), filename, "");
5104bd
   if (fs->mount() < 0) {
5104bd
     cout << "mount failed" << std::endl;
5104bd
     return -1;
5104bd
--- ceph-17.0.0-10335-gfd206722/src/s3select/include/s3select_functions.h.orig	2022-02-11 17:21:40.268627997 -0500
5104bd
+++ ceph-17.0.0-10335-gfd206722/src/s3select/include/s3select_functions.h	2022-02-11 17:21:57.155325437 -0500
5104bd
@@ -466,7 +466,7 @@
5104bd
 
5104bd
   std::string  print(int ident) override
5104bd
   {
5104bd
-    return std::string(0);
5104bd
+    return std::string("");
5104bd
   }
5104bd
 
5104bd
   void push_argument(base_statement* arg)