diff --git a/tools/chunks/catchunks/data-fetcher.cpp b/tools/chunks/catchunks/data-fetcher.cpp
index 15645b0..ccc142a 100644
--- a/tools/chunks/catchunks/data-fetcher.cpp
+++ b/tools/chunks/catchunks/data-fetcher.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2023, Regents of the University of California,
+ * Copyright (c) 2016-2024, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -138,7 +138,7 @@
   else {
     m_hasError = true;
     if (m_onNack)
-      m_onNack(interest, "Reached the maximum number of nack retries (" + to_string(m_maxNackRetries) +
+      m_onNack(interest, "Reached the maximum number of nack retries (" + std::to_string(m_maxNackRetries) +
                          ") while retrieving data for " + interest.getName().toUri());
   }
 }
@@ -163,7 +163,7 @@
   else {
     m_hasError = true;
     if (m_onTimeout)
-      m_onTimeout(interest, "Reached the maximum number of timeout retries (" + to_string(m_maxTimeoutRetries) +
+      m_onTimeout(interest, "Reached the maximum number of timeout retries (" + std::to_string(m_maxTimeoutRetries) +
                             ") while retrieving data for " + interest.getName().toUri());
   }
 }
diff --git a/tools/chunks/catchunks/pipeline-interests-adaptive.cpp b/tools/chunks/catchunks/pipeline-interests-adaptive.cpp
index d4376b7..78c4c6e 100644
--- a/tools/chunks/catchunks/pipeline-interests-adaptive.cpp
+++ b/tools/chunks/catchunks/pipeline-interests-adaptive.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2023, Regents of the University of California,
+ * Copyright (c) 2016-2024, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -129,8 +129,8 @@
       if (m_options.maxRetriesOnTimeoutOrNack != DataFetcher::MAX_RETRIES_INFINITE &&
           m_retxCount[segNo] > m_options.maxRetriesOnTimeoutOrNack) {
         return handleFail(segNo, "Reached the maximum number of retries (" +
-                          to_string(m_options.maxRetriesOnTimeoutOrNack) +
-                          ") while retrieving segment #" + to_string(segNo));
+                          std::to_string(m_options.maxRetriesOnTimeoutOrNack) +
+                          ") while retrieving segment #" + std::to_string(segNo));
       }
 
       if (m_options.isVerbose) {
diff --git a/tools/chunks/catchunks/pipeline-interests-fixed.cpp b/tools/chunks/catchunks/pipeline-interests-fixed.cpp
index a80ca5e..bd2559f 100644
--- a/tools/chunks/catchunks/pipeline-interests-fixed.cpp
+++ b/tools/chunks/catchunks/pipeline-interests-fixed.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2022, Regents of the University of California,
+ * Copyright (c) 2016-2024, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -144,7 +144,7 @@
       }
       else if (fetcher.first->hasError()) { // fetcher.second <= m_lastSegmentNo
         // there was an error while fetching a segment that is part of the content
-        return onFailure("Failure retrieving segment #" + to_string(fetcher.second));
+        return onFailure("Failure retrieving segment #" + std::to_string(fetcher.second));
       }
     }
   }
diff --git a/tools/chunks/catchunks/pipeline-interests.cpp b/tools/chunks/catchunks/pipeline-interests.cpp
index b7251ed..04d7fba 100644
--- a/tools/chunks/catchunks/pipeline-interests.cpp
+++ b/tools/chunks/catchunks/pipeline-interests.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2023, Regents of the University of California,
+ * Copyright (c) 2016-2024, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -115,7 +115,7 @@
             << "\tInterest lifetime = " << m_options.interestLifetime << "\n"
             << "\tMax retries on timeout or Nack = " <<
                (m_options.maxRetriesOnTimeoutOrNack == DataFetcher::MAX_RETRIES_INFINITE ?
-                  "infinite" : to_string(m_options.maxRetriesOnTimeoutOrNack)) << "\n";
+                  "infinite" : std::to_string(m_options.maxRetriesOnTimeoutOrNack)) << "\n";
 }
 
 void
@@ -142,15 +142,15 @@
   }
   switch (pow) {
     case 0:
-      return to_string(throughput) + " bit/s";
+      return std::to_string(throughput) + " bit/s";
     case 1:
-      return to_string(throughput) + " kbit/s";
+      return std::to_string(throughput) + " kbit/s";
     case 2:
-      return to_string(throughput) + " Mbit/s";
+      return std::to_string(throughput) + " Mbit/s";
     case 3:
-      return to_string(throughput) + " Gbit/s";
+      return std::to_string(throughput) + " Gbit/s";
     case 4:
-      return to_string(throughput) + " Tbit/s";
+      return std::to_string(throughput) + " Tbit/s";
   }
   return "";
 }
diff --git a/tools/dump/ndndump.cpp b/tools/dump/ndndump.cpp
index 00f2422..d17ae5b 100644
--- a/tools/dump/ndndump.cpp
+++ b/tools/dump/ndndump.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2011-2023, Regents of the University of California.
+ * Copyright (c) 2011-2024, Regents of the University of California.
  *
  * This file is part of ndn-tools (Named Data Networking Essential Tools).
  * See AUTHORS.md for complete list of ndn-tools authors and contributors.
@@ -130,7 +130,7 @@
   m_dataLinkType = pcap_datalink(m_pcap);
   const char* dltName = pcap_datalink_val_to_name(m_dataLinkType);
   const char* dltDesc = pcap_datalink_val_to_description(m_dataLinkType);
-  std::string formattedDlt = dltName ? dltName : to_string(m_dataLinkType);
+  std::string formattedDlt = dltName ? dltName : std::to_string(m_dataLinkType);
   if (dltDesc) {
     formattedDlt += " ("s + dltDesc + ")";
   }
diff --git a/tools/ping/client/ping.cpp b/tools/ping/client/ping.cpp
index b2cf699..cacd845 100644
--- a/tools/ping/client/ping.cpp
+++ b/tools/ping/client/ping.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  Arizona Board of Regents.
+ * Copyright (c) 2014-2024,  Arizona Board of Regents.
  *
  * This file is part of ndn-tools (Named Data Networking Essential Tools).
  * See AUTHORS.md for complete list of ndn-tools authors and contributors.
@@ -117,7 +117,7 @@
   if (!m_options.clientIdentifier.empty()) {
     name.append(m_options.clientIdentifier);
   }
-  name.append(to_string(seq));
+  name.append(std::to_string(seq));
   return name;
 }
 
