diff --git a/.jenkins.d/40-headers-check.sh b/.jenkins.d/40-headers-check.sh
index 8ee3339..40e5f34 100755
--- a/.jenkins.d/40-headers-check.sh
+++ b/.jenkins.d/40-headers-check.sh
@@ -16,7 +16,7 @@
 fi
 
 CXX=${CXX:-g++}
-STD=-std=c++14
+STD=-std=c++17
 CXXFLAGS="-O2 -Wall -Wno-unneeded-internal-declaration -Wno-unused-const-variable $(pkg-config --cflags libndn-cxx $PCFILE)"
 INCLUDEDIR="$(pkg-config --variable=includedir $PCFILE)"/$PROJ
 
diff --git a/.waf-tools/default-compiler-flags.py b/.waf-tools/default-compiler-flags.py
index 5f2d0b3..8c71871 100644
--- a/.waf-tools/default-compiler-flags.py
+++ b/.waf-tools/default-compiler-flags.py
@@ -139,7 +139,7 @@
     """
     def getGeneralFlags(self, conf):
         flags = super(GccBasicFlags, self).getGeneralFlags(conf)
-        flags['CXXFLAGS'] += ['-std=c++14']
+        flags['CXXFLAGS'] += ['-std=c++17']
         if Utils.unversioned_sys_platform() != 'darwin':
             flags['LINKFLAGS'] += ['-fuse-ld=lld']
         return flags
diff --git a/README.md b/README.md
index d4638b7..e01e4b3 100644
--- a/README.md
+++ b/README.md
@@ -8,10 +8,10 @@
 
 [![CI](https://github.com/named-data/ndn-cxx/actions/workflows/ci.yml/badge.svg)](https://github.com/named-data/ndn-cxx/actions/workflows/ci.yml)
 [![Docs](https://github.com/named-data/ndn-cxx/actions/workflows/docs.yml/badge.svg)](https://github.com/named-data/ndn-cxx/actions/workflows/docs.yml)
-![Language](https://img.shields.io/badge/C%2B%2B-14-blue)
+![Language](https://img.shields.io/badge/C%2B%2B-17-blue)
 ![Latest version](https://img.shields.io/github/v/tag/named-data/ndn-cxx?label=Latest%20version)
 
-**ndn-cxx** is a C++14 library implementing Named Data Networking (NDN) primitives
+**ndn-cxx** is a C++17 library implementing Named Data Networking (NDN) primitives
 that can be used to write various NDN applications. The library is currently being
 used by the following projects:
 
diff --git a/docs/code-style.rst b/docs/code-style.rst
index 63bd327..2baac21 100644
--- a/docs/code-style.rst
+++ b/docs/code-style.rst
@@ -180,7 +180,7 @@
         switch (condition) {
           case ABC:        // 2 space indent
             statements;    // 4 space indent
-            NDN_CXX_FALLTHROUGH;
+            [[fallthrough]];
 
           case DEF:
             statements;
@@ -211,7 +211,7 @@
           // Correct style
           case A1: {
             statements;
-            NDN_CXX_FALLTHROUGH;
+            [[fallthrough]];
           }
 
           // Incorrect style: braces should cover the entire case block
@@ -232,7 +232,7 @@
         switch (condition) {
         case ABC:        // no indent
           statements;    // 2 space indent
-          NDN_CXX_FALLTHROUGH;
+          [[fallthrough]];
 
         case DEF:
           statements;
@@ -243,11 +243,11 @@
           break;
         }
 
-    The ``NDN_CXX_FALLTHROUGH`` annotation must be included whenever there is
-    a case without a break statement. Leaving the break out is a common error,
+    The ``[[fallthrough]]`` annotation must be included whenever there is a
+    case without a break statement. Leaving the break out is a common error,
     and it must be made clear that it is intentional when it is not there.
-    Moreover, modern compilers will warn when a case that falls through is not
-    explicitly annotated.
+    Moreover, modern compilers will warn when a case that falls through is
+    not explicitly annotated.
 
 1.11. A ``try-catch`` statement should have the following form:
 
diff --git a/docs/index.rst b/docs/index.rst
index df9f084..00943d5 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -19,7 +19,7 @@
    release-notes
    releases
 
-**ndn-cxx** is a C++14 library implementing Named Data Networking (NDN) primitives
+**ndn-cxx** is a C++17 library implementing Named Data Networking (NDN) primitives
 that can be used to write various NDN applications. The library is currently being
 used by the following projects:
 
diff --git a/ndn-cxx/detail/common.hpp b/ndn-cxx/detail/common.hpp
index 13570c9..c64e4d8 100644
--- a/ndn-cxx/detail/common.hpp
+++ b/ndn-cxx/detail/common.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2021 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -30,9 +30,9 @@
 
 #include "ndn-cxx/detail/config.hpp"
 
-// require C++14
-#if __cplusplus < 201402L
-#error "ndn-cxx applications must be compiled using the C++14 standard (-std=c++14)"
+// require C++17
+#if __cplusplus < 201703L
+#error "ndn-cxx applications must be compiled using the C++17 standard (-std=c++17)"
 #endif
 
 // ndn-cxx specific macros declared in this and other headers must have NDN_CXX_ prefix
diff --git a/ndn-cxx/encoding/block.hpp b/ndn-cxx/encoding/block.hpp
index 9f8a772..b943982 100644
--- a/ndn-cxx/encoding/block.hpp
+++ b/ndn-cxx/encoding/block.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -162,7 +162,7 @@
    *  @return `true` and the parsed Block if parsing succeeds; otherwise `false` and an invalid Block
    *  @note This function does not throw upon decoding failure.
    */
-  NDN_CXX_NODISCARD static std::tuple<bool, Block>
+  [[nodiscard]] static std::tuple<bool, Block>
   fromBuffer(ConstBufferPtr buffer, size_t offset = 0);
 
   /** @brief Try to parse Block from a byte range
@@ -172,7 +172,7 @@
    *  @note This overload copies the TLV element octets to an internal buffer.
    *  @note This function does not throw upon decoding failure.
    */
-  NDN_CXX_NODISCARD static std::tuple<bool, Block>
+  [[nodiscard]] static std::tuple<bool, Block>
   fromBuffer(span<const uint8_t> buffer);
 
   /** @brief Parse Block from an input stream
diff --git a/ndn-cxx/encoding/tlv.hpp b/ndn-cxx/encoding/tlv.hpp
index 176d609..35a46e4 100644
--- a/ndn-cxx/encoding/tlv.hpp
+++ b/ndn-cxx/encoding/tlv.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -176,7 +176,7 @@
  * @return true if number was successfully read from input, false otherwise
  */
 template<typename Iterator>
-NDN_CXX_NODISCARD bool
+[[nodiscard]] bool
 readVarNumber(Iterator& begin, Iterator end, uint64_t& number) noexcept;
 
 /**
@@ -193,7 +193,7 @@
  *       the TLV-TYPE is zero or larger than 2^32-1 (maximum allowed by the packet format).
  */
 template<typename Iterator>
-NDN_CXX_NODISCARD bool
+[[nodiscard]] bool
 readType(Iterator& begin, Iterator end, uint32_t& type) noexcept;
 
 /**
diff --git a/ndn-cxx/impl/face-impl.hpp b/ndn-cxx/impl/face-impl.hpp
index 239885d..86ccb9e 100644
--- a/ndn-cxx/impl/face-impl.hpp
+++ b/ndn-cxx/impl/face-impl.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -109,7 +109,7 @@
   void
   asyncRemovePendingInterest(detail::RecordId id)
   {
-    m_face.getIoService().post([id, w = weak_ptr<Impl>{shared_from_this()}] { // use weak_from_this() in C++17
+    m_face.getIoService().post([id, w = weak_from_this()] {
       auto impl = w.lock();
       if (impl != nullptr) {
         impl->m_pendingInterestTable.erase(id);
@@ -195,7 +195,7 @@
   void
   asyncUnsetInterestFilter(detail::RecordId id)
   {
-    m_face.getIoService().post([id, w = weak_ptr<Impl>{shared_from_this()}] { // use weak_from_this() in C++17
+    m_face.getIoService().post([id, w = weak_from_this()] {
       auto impl = w.lock();
       if (impl != nullptr) {
         impl->unsetInterestFilter(id);
@@ -292,7 +292,7 @@
                         const UnregisterPrefixSuccessCallback& onSuccess,
                         const UnregisterPrefixFailureCallback& onFailure)
   {
-    m_face.getIoService().post([=, w = weak_ptr<Impl>{shared_from_this()}] { // use weak_from_this() in C++17
+    m_face.getIoService().post([=, w = weak_from_this()] {
       auto impl = w.lock();
       if (impl != nullptr) {
         impl->unregisterPrefix(id, onSuccess, onFailure);
diff --git a/ndn-cxx/impl/record-container.hpp b/ndn-cxx/impl/record-container.hpp
index e149b40..12fff0d 100644
--- a/ndn-cxx/impl/record-container.hpp
+++ b/ndn-cxx/impl/record-container.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2021 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -173,7 +173,7 @@
     });
   }
 
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   empty() const noexcept
   {
     return m_container.empty();
diff --git a/ndn-cxx/interest-filter.hpp b/ndn-cxx/interest-filter.hpp
index 66d6cd2..078ac1c 100644
--- a/ndn-cxx/interest-filter.hpp
+++ b/ndn-cxx/interest-filter.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -125,7 +125,7 @@
   /**
    * \brief Get whether Interest loopback is allowed.
    */
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   allowsLoopback() const noexcept
   {
     return m_allowsLoopback;
diff --git a/ndn-cxx/interest.cpp b/ndn-cxx/interest.cpp
index b6d8f3c..345d60b 100644
--- a/ndn-cxx/interest.cpp
+++ b/ndn-cxx/interest.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -758,8 +758,7 @@
   auto printOne = [&] (const auto&... args) {
     os << delim;
     delim = '&';
-    using expand = int[];
-    (void)expand{(os << args, 0)...}; // use a fold expression when we switch to C++17
+    (os << ... << args);
   };
 
   if (interest.getCanBePrefix()) {
diff --git a/ndn-cxx/interest.hpp b/ndn-cxx/interest.hpp
index d282052..9777c14 100644
--- a/ndn-cxx/interest.hpp
+++ b/ndn-cxx/interest.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -464,7 +464,7 @@
   Interest&
   setSignatureValueInternal(Block sigValue);
 
-  NDN_CXX_NODISCARD shared_ptr<Buffer>
+  [[nodiscard]] shared_ptr<Buffer>
   computeParametersDigest() const;
 
   /** @brief Append a ParametersSha256DigestComponent to the Interest's name
diff --git a/ndn-cxx/key-locator.hpp b/ndn-cxx/key-locator.hpp
index d12ac23..ec5688f 100644
--- a/ndn-cxx/key-locator.hpp
+++ b/ndn-cxx/key-locator.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -71,7 +71,7 @@
   wireDecode(const Block& wire);
 
 public: // attributes
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   empty() const
   {
     return holds_alternative<monostate>(m_locator);
diff --git a/ndn-cxx/lp/packet.hpp b/ndn-cxx/lp/packet.hpp
index 4febf54..5b90549 100644
--- a/ndn-cxx/lp/packet.hpp
+++ b/ndn-cxx/lp/packet.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -61,7 +61,7 @@
    * \retval true packet has no field
    * \retval false packet has one or more fields
    */
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   empty() const
   {
     return m_wire.elements_size() == 0;
@@ -73,7 +73,7 @@
    * \details This is equivalent to count() > 0
    */
   template<typename FIELD>
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   has() const
   {
     return count<FIELD>() > 0;
@@ -83,7 +83,7 @@
    * \brief Returns the number of occurrences of \c FIELD.
    */
   template<typename FIELD>
-  NDN_CXX_NODISCARD size_t
+  [[nodiscard]] size_t
   count() const
   {
     return std::count_if(m_wire.elements_begin(), m_wire.elements_end(),
@@ -115,7 +115,7 @@
    * \brief Returns the values of all occurrences of \c FIELD.
    */
   template<typename FIELD>
-  NDN_CXX_NODISCARD std::vector<typename FIELD::ValueType>
+  [[nodiscard]] std::vector<typename FIELD::ValueType>
   list() const
   {
     std::vector<typename FIELD::ValueType> output;
diff --git a/ndn-cxx/metadata-object.hpp b/ndn-cxx/metadata-object.hpp
index 534b1fa..6ad674a 100644
--- a/ndn-cxx/metadata-object.hpp
+++ b/ndn-cxx/metadata-object.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2021 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -79,7 +79,7 @@
    *
    * @throw tlv::Error @p discoveryInterestName is not valid
    */
-  NDN_CXX_NODISCARD Data
+  [[nodiscard]] Data
   makeData(Name discoveryInterestName,
            KeyChain& keyChain,
            const ndn::security::SigningInfo& si = security::SigningInfo(),
@@ -123,7 +123,7 @@
    *
    * @param name prefix of data collection
    */
-  NDN_CXX_NODISCARD static Interest
+  [[nodiscard]] static Interest
   makeDiscoveryInterest(Name name);
 
 private:
diff --git a/ndn-cxx/name-component.hpp b/ndn-cxx/name-component.hpp
index afd42a0..9f196f2 100644
--- a/ndn-cxx/name-component.hpp
+++ b/ndn-cxx/name-component.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -543,7 +543,7 @@
   }
 
 public: // comparison
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   empty() const noexcept
   {
     return value_size() == 0;
diff --git a/ndn-cxx/name.hpp b/ndn-cxx/name.hpp
index 62066fc..297c1ef 100644
--- a/ndn-cxx/name.hpp
+++ b/ndn-cxx/name.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -142,7 +142,7 @@
   /**
    * @brief Checks if the name is empty, i.e., has no components.
    */
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   empty() const noexcept
   {
     return m_wire.elements().empty();
diff --git a/ndn-cxx/net/face-uri.hpp b/ndn-cxx/net/face-uri.hpp
index 87555f4..bca98c9 100644
--- a/ndn-cxx/net/face-uri.hpp
+++ b/ndn-cxx/net/face-uri.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California,
+ * Copyright (c) 2013-2023 Regents of the University of California,
  *                         Arizona Board of Regents,
  *                         Colorado State University,
  *                         University Pierre & Marie Curie, Sorbonne University,
@@ -67,7 +67,7 @@
   FaceUri(const char* uri);
 
   /// Exception-safe parsing.
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   parse(const std::string& uri);
 
 public: // scheme-specific construction
diff --git a/ndn-cxx/net/network-monitor.hpp b/ndn-cxx/net/network-monitor.hpp
index f9dcc8e..3bd8927 100644
--- a/ndn-cxx/net/network-monitor.hpp
+++ b/ndn-cxx/net/network-monitor.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2021 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -92,7 +92,7 @@
    * @warning May return incomplete results if called before the
    *          #onEnumerationCompleted signal has been emitted.
    */
-  NDN_CXX_NODISCARD std::vector<shared_ptr<const NetworkInterface>>
+  [[nodiscard]] std::vector<shared_ptr<const NetworkInterface>>
   listNetworkInterfaces() const;
 
 protected:
diff --git a/ndn-cxx/security/impl/openssl-helper.hpp b/ndn-cxx/security/impl/openssl-helper.hpp
index 310a283..e348391 100644
--- a/ndn-cxx/security/impl/openssl-helper.hpp
+++ b/ndn-cxx/security/impl/openssl-helper.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -31,10 +31,10 @@
 namespace security {
 namespace detail {
 
-NDN_CXX_NODISCARD const EVP_MD*
+[[nodiscard]] const EVP_MD*
 digestAlgorithmToEvpMd(DigestAlgorithm algo);
 
-NDN_CXX_NODISCARD int
+[[nodiscard]] int
 getEvpPkeyType(const EVP_PKEY* key);
 
 class EvpMdCtx : noncopyable
@@ -86,10 +86,10 @@
     return m_bio;
   }
 
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   read(span<uint8_t> buf) const noexcept;
 
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   write(span<const uint8_t> buf) noexcept;
 
 private:
diff --git a/ndn-cxx/security/key-chain.cpp b/ndn-cxx/security/key-chain.cpp
index bcedeb5..dd30d73 100644
--- a/ndn-cxx/security/key-chain.cpp
+++ b/ndn-cxx/security/key-chain.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -114,13 +114,13 @@
 class KeyChain::Locator
 {
 public:
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   empty() const
   {
     return scheme.empty();
   }
 
-  NDN_CXX_NODISCARD std::string
+  [[nodiscard]] std::string
   canonical() const
   {
     return scheme + ':' + location;
diff --git a/ndn-cxx/security/pib/certificate-container.hpp b/ndn-cxx/security/pib/certificate-container.hpp
index 34f6488..52b4520 100644
--- a/ndn-cxx/security/pib/certificate-container.hpp
+++ b/ndn-cxx/security/pib/certificate-container.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -121,7 +121,7 @@
   /**
    * @brief Check whether the container is empty.
    */
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   empty() const noexcept
   {
     return m_certNames.empty();
diff --git a/ndn-cxx/security/pib/identity-container.hpp b/ndn-cxx/security/pib/identity-container.hpp
index b354ade..75fe3f4 100644
--- a/ndn-cxx/security/pib/identity-container.hpp
+++ b/ndn-cxx/security/pib/identity-container.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -122,7 +122,7 @@
   /**
    * @brief Check whether the container is empty.
    */
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   empty() const noexcept
   {
     return m_identityNames.empty();
diff --git a/ndn-cxx/security/pib/key-container.hpp b/ndn-cxx/security/pib/key-container.hpp
index 19ebfa9..cb9b211 100644
--- a/ndn-cxx/security/pib/key-container.hpp
+++ b/ndn-cxx/security/pib/key-container.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -122,7 +122,7 @@
   /**
    * @brief Check whether the container is empty.
    */
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   empty() const noexcept
   {
     return m_keyNames.empty();
diff --git a/ndn-cxx/security/tpm/back-end.hpp b/ndn-cxx/security/tpm/back-end.hpp
index 41078f2..dfe50cd 100644
--- a/ndn-cxx/security/tpm/back-end.hpp
+++ b/ndn-cxx/security/tpm/back-end.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2021 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -155,7 +155,7 @@
    *
    * @return True if the TPM was unlocked.
    */
-  NDN_CXX_NODISCARD virtual bool
+  [[nodiscard]] virtual bool
   unlockTpm(const char* pw, size_t pwLen) const;
 
 protected: // helper methods
diff --git a/ndn-cxx/security/tpm/tpm.hpp b/ndn-cxx/security/tpm/tpm.hpp
index 4c239ed..1ffdeb1 100644
--- a/ndn-cxx/security/tpm/tpm.hpp
+++ b/ndn-cxx/security/tpm/tpm.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -117,7 +117,7 @@
    * @retval false the signature is not valid
    * @retval indeterminate the key does not exist
    */
-  NDN_CXX_NODISCARD boost::logic::tribool
+  [[nodiscard]] boost::logic::tribool
   verify(const InputBuffers& bufs, span<const uint8_t> sig, const Name& keyName,
          DigestAlgorithm digestAlgorithm) const;
 
@@ -156,7 +156,7 @@
    * @param password The password to unlock the TPM.
    * @param passwordLength The password size.
    */
-  NDN_CXX_NODISCARD bool
+  [[nodiscard]] bool
   unlockTpm(const char* password, size_t passwordLength) const;
 
 NDN_CXX_PUBLIC_WITH_TESTS_ELSE_PRIVATE: // operations accessible only by KeyChain
diff --git a/ndn-cxx/security/verification-helpers.hpp b/ndn-cxx/security/verification-helpers.hpp
index 36cb721..26cc824 100644
--- a/ndn-cxx/security/verification-helpers.hpp
+++ b/ndn-cxx/security/verification-helpers.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -51,21 +51,21 @@
 /**
  * @brief Verify @p blobs using @p key against @p sig.
  */
-NDN_CXX_NODISCARD bool
+[[nodiscard]] bool
 verifySignature(const InputBuffers& blobs, span<const uint8_t> sig, const transform::PublicKey& key);
 
 /**
  * @brief Verify @p blobs using @p key against @p sig.
  * @note @p key must be a public key in PKCS #8 format.
  */
-NDN_CXX_NODISCARD bool
+[[nodiscard]] bool
 verifySignature(const InputBuffers& blobs, span<const uint8_t> sig, span<const uint8_t> key);
 
 /**
  * @brief Verify @p data using @p key.
  * @note @p key must be a public key in PKCS #8 format.
  */
-NDN_CXX_NODISCARD bool
+[[nodiscard]] bool
 verifySignature(const Data& data, span<const uint8_t> key);
 
 /**
@@ -73,33 +73,33 @@
  * @note @p key must be a public key in PKCS #8 format.
  * @note This method verifies only signature of the signed interest.
  */
-NDN_CXX_NODISCARD bool
+[[nodiscard]] bool
 verifySignature(const Interest& interest, span<const uint8_t> key);
 
 /**
  * @brief Verify @p data using @p key.
  */
-NDN_CXX_NODISCARD bool
+[[nodiscard]] bool
 verifySignature(const Data& data, const transform::PublicKey& key);
 
 /**
  * @brief Verify @p interest using @p key.
  * @note This method verifies only signature of the signed interest.
  */
-NDN_CXX_NODISCARD bool
+[[nodiscard]] bool
 verifySignature(const Interest& interest, const transform::PublicKey& key);
 
 /**
  * @brief Verify @p data using @p key.
  */
-NDN_CXX_NODISCARD bool
+[[nodiscard]] bool
 verifySignature(const Data& data, const pib::Key& key);
 
 /**
  * @brief Verify @p interest using @p key.
  * @note This method verifies only signature of the signed interest.
  */
-NDN_CXX_NODISCARD bool
+[[nodiscard]] bool
 verifySignature(const Interest& interest, const pib::Key& key);
 
 /**
@@ -107,7 +107,7 @@
  *
  * If @p cert is nullopt, @p data assumed to be self-verifiable (with digest or attributes)
  */
-NDN_CXX_NODISCARD bool
+[[nodiscard]] bool
 verifySignature(const Data& data, const optional<Certificate>& cert);
 
 /**
@@ -116,13 +116,13 @@
  *
  * If @p cert is nullptr, @p interest assumed to be self-verifiable (with digest or attributes)
  */
-NDN_CXX_NODISCARD bool
+[[nodiscard]] bool
 verifySignature(const Interest& interest, const optional<Certificate>& cert);
 
 /**
  * @brief Verify @p data using @p tpm and @p keyName with the @p digestAlgorithm.
  */
-NDN_CXX_NODISCARD bool
+[[nodiscard]] bool
 verifySignature(const Data& data, const tpm::Tpm& tpm, const Name& keyName,
                 DigestAlgorithm digestAlgorithm);
 
@@ -130,7 +130,7 @@
  * @brief Verify @p interest using @p tpm and @p keyName with the @p digestAlgorithm.
  * @note This method verifies only signature of the signed interest.
  */
-NDN_CXX_NODISCARD bool
+[[nodiscard]] bool
 verifySignature(const Interest& interest, const tpm::Tpm& tpm, const Name& keyName,
                 DigestAlgorithm digestAlgorithm);
 
diff --git a/ndn-cxx/util/backports.hpp b/ndn-cxx/util/backports.hpp
index 6015153..5a41294 100644
--- a/ndn-cxx/util/backports.hpp
+++ b/ndn-cxx/util/backports.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -28,50 +28,12 @@
 #include <boost/predef/compiler/gcc.h>
 #include <boost/predef/compiler/visualc.h>
 
-#ifdef __has_cpp_attribute
-#  define NDN_CXX_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
-#else
-#  define NDN_CXX_HAS_CPP_ATTRIBUTE(x) 0
-#endif
-
-#ifdef __has_include
-#  define NDN_CXX_HAS_INCLUDE(x) __has_include(x)
-#else
-#  define NDN_CXX_HAS_INCLUDE(x) 0
-#endif
-
-//
-// https://wg21.link/P0188
-// [[fallthrough]] attribute (C++17)
-//
-#if (__cplusplus > 201402L) && NDN_CXX_HAS_CPP_ATTRIBUTE(fallthrough)
-#  define NDN_CXX_FALLTHROUGH [[fallthrough]]
-#elif NDN_CXX_HAS_CPP_ATTRIBUTE(clang::fallthrough)
-#  define NDN_CXX_FALLTHROUGH [[clang::fallthrough]]
-#elif NDN_CXX_HAS_CPP_ATTRIBUTE(gnu::fallthrough)
-#  define NDN_CXX_FALLTHROUGH [[gnu::fallthrough]]
-#elif BOOST_COMP_GNUC >= BOOST_VERSION_NUMBER(7,0,0)
-#  define NDN_CXX_FALLTHROUGH __attribute__((fallthrough))
-#else
-#  define NDN_CXX_FALLTHROUGH ((void)0)
-#endif
-
-//
-// https://wg21.link/P0189
-// [[nodiscard]] attribute (C++17)
-//
-#if (__cplusplus > 201402L) && NDN_CXX_HAS_CPP_ATTRIBUTE(nodiscard)
-#  define NDN_CXX_NODISCARD [[nodiscard]]
-#elif NDN_CXX_HAS_CPP_ATTRIBUTE(gnu::warn_unused_result)
-#  define NDN_CXX_NODISCARD [[gnu::warn_unused_result]]
-#else
-#  define NDN_CXX_NODISCARD
-#endif
-
 #ifndef NDN_CXX_HAVE_STD_TO_STRING
 #include <boost/lexical_cast.hpp>
 #endif
 
+#include <utility>
+
 namespace ndn {
 
 //
@@ -90,30 +52,6 @@
 #endif // NDN_CXX_HAVE_STD_TO_STRING
 
 //
-// https://wg21.link/P0025
-// std::clamp() (C++17)
-//
-#if __cpp_lib_clamp >= 201603L
-using std::clamp;
-#else
-template<typename T, typename Compare>
-constexpr const T&
-clamp(const T& v, const T& lo, const T& hi, Compare comp)
-{
-  BOOST_ASSERT(!comp(hi, lo));
-  return comp(v, lo) ? lo : comp(hi, v) ? hi : v;
-}
-
-template<typename T>
-constexpr const T&
-clamp(const T& v, const T& lo, const T& hi)
-{
-  BOOST_ASSERT(!(hi < lo));
-  return (v < lo) ? lo : (hi < v) ? hi : v;
-}
-#endif // __cpp_lib_clamp
-
-//
 // https://wg21.link/P1682
 // std::to_underlying() (C++23)
 //
@@ -121,7 +59,7 @@
 using std::to_underlying;
 #else
 template<typename T>
-NDN_CXX_NODISCARD constexpr std::underlying_type_t<T>
+[[nodiscard]] constexpr std::underlying_type_t<T>
 to_underlying(T val) noexcept
 {
   // instantiating underlying_type with a non-enum type is UB before C++20
diff --git a/ndn-cxx/util/logging.hpp b/ndn-cxx/util/logging.hpp
index bdb0a89..644bf77 100644
--- a/ndn-cxx/util/logging.hpp
+++ b/ndn-cxx/util/logging.hpp
@@ -50,7 +50,7 @@
   /**
    * \brief Get list of all registered logger names.
    */
-  NDN_CXX_NODISCARD static std::set<std::string>
+  [[nodiscard]] static std::set<std::string>
   getLoggerNames();
 
   /** \brief Set severity level.
@@ -118,7 +118,7 @@
   /**
    * \brief Create stream log destination using default formatting.
    */
-  NDN_CXX_NODISCARD static boost::shared_ptr<boost::log::sinks::sink>
+  [[nodiscard]] static boost::shared_ptr<boost::log::sinks::sink>
   makeDefaultStreamDestination(shared_ptr<std::ostream> os, bool wantAutoFlush = true);
 
 private:
@@ -130,7 +130,7 @@
   void
   registerLoggerNameImpl(std::string name);
 
-  NDN_CXX_NODISCARD std::set<std::string>
+  [[nodiscard]] std::set<std::string>
   getLoggerNamesImpl() const;
 
   /**
diff --git a/ndn-cxx/util/ostream-joiner.hpp b/ndn-cxx/util/ostream-joiner.hpp
index 8570102..e187854 100644
--- a/ndn-cxx/util/ostream-joiner.hpp
+++ b/ndn-cxx/util/ostream-joiner.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2021 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -19,17 +19,18 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-/** \file
- *  \brief Backport of ostream_joiner from the Library Fundamentals v2 TS
- *  \sa https://en.cppreference.com/w/cpp/experimental/ostream_joiner
+/**
+ * \file
+ * \brief Backport of `ostream_joiner` from the Library Fundamentals v2 TS
+ * \sa https://en.cppreference.com/w/cpp/experimental/ostream_joiner
  */
 
 #ifndef NDN_CXX_UTIL_OSTREAM_JOINER_HPP
 #define NDN_CXX_UTIL_OSTREAM_JOINER_HPP
 
-#include "ndn-cxx/util/backports.hpp"
+#include "ndn-cxx/detail/common.hpp"
 
-#if NDN_CXX_HAS_INCLUDE(<experimental/iterator>)
+#if __has_include(<experimental/iterator>)
 #  include <experimental/iterator>
 #  if __cpp_lib_experimental_ostream_joiner >= 201411
 #    define NDN_CXX_HAVE_EXPERIMENTAL_OSTREAM_JOINER
diff --git a/ndn-cxx/util/regex/regex-top-matcher.cpp b/ndn-cxx/util/regex/regex-top-matcher.cpp
index f326ca5..0a334ce 100644
--- a/ndn-cxx/util/regex/regex-top-matcher.cpp
+++ b/ndn-cxx/util/regex/regex-top-matcher.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2019 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -206,7 +206,7 @@
       case '^':
       case '$':
         newStr.push_back('\\');
-        NDN_CXX_FALLTHROUGH;
+        [[fallthrough]];
       default:
         newStr.push_back(c);
         break;
diff --git a/ndn-cxx/util/rtt-estimator.cpp b/ndn-cxx/util/rtt-estimator.cpp
index a0a4779..04310d2 100644
--- a/ndn-cxx/util/rtt-estimator.cpp
+++ b/ndn-cxx/util/rtt-estimator.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (C) 2016-2019, Arizona Board of Regents.
+ * Copyright (C) 2016-2023, Arizona Board of Regents.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -59,15 +59,15 @@
                                                       beta * time::abs(m_sRtt - rtt));
     m_sRtt = time::duration_cast<time::nanoseconds>((1 - alpha) * m_sRtt + alpha * rtt);
   }
-  m_rto = clamp(m_sRtt + m_options->k * m_rttVar,
-                m_options->minRto, m_options->maxRto);
+  m_rto = std::clamp(m_sRtt + m_options->k * m_rttVar,
+                     m_options->minRto, m_options->maxRto);
 }
 
 void
 RttEstimator::backoffRto()
 {
-  m_rto = clamp(m_rto * m_options->rtoBackoffMultiplier,
-                m_options->minRto, m_options->maxRto);
+  m_rto = std::clamp(m_rto * m_options->rtoBackoffMultiplier,
+                     m_options->minRto, m_options->maxRto);
 }
 
 void
diff --git a/ndn-cxx/util/scheduler.cpp b/ndn-cxx/util/scheduler.cpp
index 8a542c3..b8a9691 100644
--- a/ndn-cxx/util/scheduler.cpp
+++ b/ndn-cxx/util/scheduler.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2020 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -37,7 +37,7 @@
   {
   }
 
-  NDN_CXX_NODISCARD time::nanoseconds
+  [[nodiscard]] time::nanoseconds
   expiresFromNow() const
   {
     return std::max(expireTime - time::steady_clock::now(), 0_ns);
diff --git a/ndn-cxx/util/segmenter.hpp b/ndn-cxx/util/segmenter.hpp
index bfbf838..8ebd1aa 100644
--- a/ndn-cxx/util/segmenter.hpp
+++ b/ndn-cxx/util/segmenter.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -50,7 +50,7 @@
    * @param contentType The `ContentType` of created Data packets.
    * @note A minimum of one Data packet is always returned, even if @p buffer is empty.
    */
-  NDN_CXX_NODISCARD std::vector<std::shared_ptr<Data>>
+  [[nodiscard]] std::vector<std::shared_ptr<Data>>
   segment(span<const uint8_t> buffer,
           const Name& dataName,
           size_t maxSegmentSize,
@@ -66,7 +66,7 @@
    * @param contentType The `ContentType` of created Data packets.
    * @note A minimum of one Data packet is always returned, even if @p input is empty.
    */
-  NDN_CXX_NODISCARD std::vector<std::shared_ptr<Data>>
+  [[nodiscard]] std::vector<std::shared_ptr<Data>>
   segment(std::istream& input,
           const Name& dataName,
           size_t maxSegmentSize,
diff --git a/ndn-cxx/util/string-helper.hpp b/ndn-cxx/util/string-helper.hpp
index 1149837..4447df4 100644
--- a/ndn-cxx/util/string-helper.hpp
+++ b/ndn-cxx/util/string-helper.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -99,7 +99,7 @@
  * Each octet of input is always converted to two hex characters (e.g., "00" for octet==0).
  * The output string is a continuous sequence of hex characters without any whitespace separators.
  */
-NDN_CXX_NODISCARD std::string
+[[nodiscard]] std::string
 toHex(span<const uint8_t> buffer, bool wantUpperCase = true);
 
 /**
@@ -114,7 +114,7 @@
 /**
  * @brief Convert (the least significant nibble of) @p n to the corresponding hex character.
  */
-NDN_CXX_NODISCARD constexpr char
+[[nodiscard]] constexpr char
 toHexChar(unsigned int n, bool wantUpperCase = true) noexcept
 {
   return wantUpperCase ?
@@ -125,7 +125,7 @@
 /**
  * @brief Convert the hex character @p c to an integer in [0, 15], or -1 if it's not a hex character.
  */
-NDN_CXX_NODISCARD constexpr int
+[[nodiscard]] constexpr int
 fromHexChar(char c) noexcept
 {
   return (c >= '0' && c <= '9') ? int(c - '0') :
@@ -151,7 +151,7 @@
  *
  * @see RFC 3986 section 2
  */
-NDN_CXX_NODISCARD std::string
+[[nodiscard]] std::string
 escape(const std::string& str);
 
 void
@@ -171,7 +171,7 @@
  *
  * @see RFC 3986 section 2
  */
-NDN_CXX_NODISCARD std::string
+[[nodiscard]] std::string
 unescape(const std::string& str);
 
 void
diff --git a/tests/unit/security/pib/pib-data-fixture.hpp b/tests/unit/security/pib/pib-data-fixture.hpp
index 66e7fbf..64c8652 100644
--- a/tests/unit/security/pib/pib-data-fixture.hpp
+++ b/tests/unit/security/pib/pib-data-fixture.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2022 Regents of the University of California.
+ * Copyright (c) 2013-2023 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -35,10 +35,10 @@
 public:
   PibDataFixture();
 
-  NDN_CXX_NODISCARD static shared_ptr<PibImpl>
+  [[nodiscard]] static shared_ptr<PibImpl>
   makePibWithIdentity(const Name& idName);
 
-  NDN_CXX_NODISCARD static shared_ptr<PibImpl>
+  [[nodiscard]] static shared_ptr<PibImpl>
   makePibWithKey(const Name& keyName, span<const uint8_t> key);
 
 public:
diff --git a/tests/unit/util/backports.t.cpp b/tests/unit/util/backports.t.cpp
deleted file mode 100644
index 2404d03..0000000
--- a/tests/unit/util/backports.t.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2013-2020 Regents of the University of California.
- *
- * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
- *
- * ndn-cxx library is free software: you can redistribute it and/or modify it under the
- * terms of the GNU Lesser General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later version.
- *
- * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
- *
- * You should have received copies of the GNU General Public License and GNU Lesser
- * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
- * <http://www.gnu.org/licenses/>.
- *
- * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
- */
-
-#include "ndn-cxx/util/backports.hpp"
-
-#include "tests/boost-test.hpp"
-
-namespace ndn {
-namespace tests {
-
-BOOST_AUTO_TEST_SUITE(Util)
-BOOST_AUTO_TEST_SUITE(TestBackports)
-
-BOOST_AUTO_TEST_CASE(Clamp)
-{
-  int x = clamp(5, 1, 10);
-  BOOST_CHECK_EQUAL(x, 5);
-
-  x = clamp(-5, 1, 10);
-  BOOST_CHECK_EQUAL(x, 1);
-
-  x = clamp(15, 1, 10);
-  BOOST_CHECK_EQUAL(x, 10);
-
-  x = clamp(5, 10, 1, std::greater<int>());
-  BOOST_CHECK_EQUAL(x, 5);
-
-  x = clamp(-5, 10, 1, std::greater<int>());
-  BOOST_CHECK_EQUAL(x, 1);
-
-  x = clamp(15, 10, 1, std::greater<int>());
-  BOOST_CHECK_EQUAL(x, 10);
-}
-
-BOOST_AUTO_TEST_SUITE_END() // TestBackports
-BOOST_AUTO_TEST_SUITE_END() // Util
-
-} // namespace tests
-} // namespace ndn
