daemon: mark some classes and methods 'final'

As suggested by gcc's -Wsuggest-final-types and -Wsuggest-final-methods

Change-Id: I1622857ee53581efd0c6ce3fe93199c72202d817
diff --git a/daemon/face/ethernet-channel.hpp b/daemon/face/ethernet-channel.hpp
index 36d32be..7e7fa87 100644
--- a/daemon/face/ethernet-channel.hpp
+++ b/daemon/face/ethernet-channel.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -29,6 +29,7 @@
 #include "channel.hpp"
 #include "ethernet-protocol.hpp"
 #include "pcap-helper.hpp"
+
 #include <ndn-cxx/net/network-interface.hpp>
 
 namespace nfd {
@@ -37,7 +38,7 @@
 /**
  * \brief Class implementing Ethernet-based channel to create faces
  */
-class EthernetChannel : public Channel
+class EthernetChannel final : public Channel
 {
 public:
   /**
@@ -63,13 +64,13 @@
                   time::nanoseconds idleTimeout);
 
   bool
-  isListening() const override
+  isListening() const final
   {
     return m_isListening;
   }
 
   size_t
-  size() const override
+  size() const final
   {
     return m_channelFaces.size();
   }
diff --git a/daemon/face/ethernet-factory.hpp b/daemon/face/ethernet-factory.hpp
index 9b25b3c..578a901 100644
--- a/daemon/face/ethernet-factory.hpp
+++ b/daemon/face/ethernet-factory.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -34,7 +34,7 @@
 
 /** \brief Protocol factory for Ethernet
  */
-class EthernetFactory : public ProtocolFactory
+class EthernetFactory final : public ProtocolFactory
 {
 public:
   static const std::string&
@@ -77,15 +77,15 @@
    */
   void
   doProcessConfig(OptionalConfigSection configSection,
-                  FaceSystem::ConfigContext& context) override;
+                  FaceSystem::ConfigContext& context) final;
 
   void
   doCreateFace(const CreateFaceRequest& req,
                const FaceCreatedCallback& onCreated,
-               const FaceCreationFailedCallback& onFailure) override;
+               const FaceCreationFailedCallback& onFailure) final;
 
   std::vector<shared_ptr<const Channel>>
-  doGetChannels() const override;
+  doGetChannels() const final;
 
   /** \brief Create EthernetChannel on \p netif if requested by \p m_unicastConfig.
    *  \return new or existing channel, or nullptr if no channel should be created
diff --git a/daemon/face/tcp-channel.hpp b/daemon/face/tcp-channel.hpp
index cb41b2c..788fdc1 100644
--- a/daemon/face/tcp-channel.hpp
+++ b/daemon/face/tcp-channel.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2019,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -46,7 +46,7 @@
  * connections (TcpChannel::listen needs to be called for that
  * to work) or explicitly after using TcpChannel::connect method.
  */
-class TcpChannel : public Channel
+class TcpChannel final : public Channel
 {
 public:
   /**
@@ -59,13 +59,13 @@
              DetermineFaceScopeFromAddress determineFaceScope);
 
   bool
-  isListening() const override
+  isListening() const final
   {
     return m_acceptor.is_open();
   }
 
   size_t
-  size() const override
+  size() const final
   {
     return m_channelFaces.size();
   }
diff --git a/daemon/face/tcp-factory.hpp b/daemon/face/tcp-factory.hpp
index 519d2dc..212acbb 100644
--- a/daemon/face/tcp-factory.hpp
+++ b/daemon/face/tcp-factory.hpp
@@ -34,7 +34,7 @@
 
 /** \brief Protocol factory for TCP over IPv4 and IPv6
  */
-class TcpFactory : public ProtocolFactory
+class TcpFactory final : public ProtocolFactory
 {
 public:
   static const std::string&
@@ -61,15 +61,15 @@
    */
   void
   doProcessConfig(OptionalConfigSection configSection,
-                  FaceSystem::ConfigContext& context) override;
+                  FaceSystem::ConfigContext& context) final;
 
   void
   doCreateFace(const CreateFaceRequest& req,
                const FaceCreatedCallback& onCreated,
-               const FaceCreationFailedCallback& onFailure) override;
+               const FaceCreationFailedCallback& onFailure) final;
 
   std::vector<shared_ptr<const Channel>>
-  doGetChannels() const override;
+  doGetChannels() const final;
 
   ndn::nfd::FaceScope
   determineFaceScopeFromAddresses(const boost::asio::ip::address& local,
diff --git a/daemon/face/udp-channel.hpp b/daemon/face/udp-channel.hpp
index c3f696d..25e735a 100644
--- a/daemon/face/udp-channel.hpp
+++ b/daemon/face/udp-channel.hpp
@@ -37,7 +37,7 @@
 /**
  * \brief Class implementing UDP-based channel to create faces
  */
-class UdpChannel : public Channel
+class UdpChannel final : public Channel
 {
 public:
   /**
@@ -53,13 +53,13 @@
              size_t defaultMtu);
 
   bool
-  isListening() const override
+  isListening() const final
   {
     return m_socket.is_open();
   }
 
   size_t
-  size() const override
+  size() const final
   {
     return m_channelFaces.size();
   }
diff --git a/daemon/face/udp-factory.hpp b/daemon/face/udp-factory.hpp
index a0f5b6d..28dbfaa 100644
--- a/daemon/face/udp-factory.hpp
+++ b/daemon/face/udp-factory.hpp
@@ -34,7 +34,7 @@
 
 /** \brief Protocol factory for UDP over IPv4 and IPv6
  */
-class UdpFactory : public ProtocolFactory
+class UdpFactory final : public ProtocolFactory
 {
 public:
   class Error : public ProtocolFactory::Error
@@ -100,15 +100,15 @@
    */
   void
   doProcessConfig(OptionalConfigSection configSection,
-                  FaceSystem::ConfigContext& context) override;
+                  FaceSystem::ConfigContext& context) final;
 
   void
   doCreateFace(const CreateFaceRequest& req,
                const FaceCreatedCallback& onCreated,
-               const FaceCreationFailedCallback& onFailure) override;
+               const FaceCreationFailedCallback& onFailure) final;
 
   std::vector<shared_ptr<const Channel>>
-  doGetChannels() const override;
+  doGetChannels() const final;
 
   /** \brief Create UDP multicast faces on \p netif if needed by \p m_mcastConfig
    *  \return list of faces (just created or already existing) on \p netif
diff --git a/daemon/face/unix-stream-channel.hpp b/daemon/face/unix-stream-channel.hpp
index 6a49667..1faffa8 100644
--- a/daemon/face/unix-stream-channel.hpp
+++ b/daemon/face/unix-stream-channel.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -42,7 +42,7 @@
  * Channel can create faces as a response to incoming IPC connections
  * (UnixStreamChannel::listen needs to be called for that to work).
  */
-class UnixStreamChannel : public Channel
+class UnixStreamChannel final : public Channel
 {
 public:
   /**
@@ -66,16 +66,16 @@
    */
   UnixStreamChannel(const unix_stream::Endpoint& endpoint, bool wantCongestionMarking);
 
-  ~UnixStreamChannel() override;
+  ~UnixStreamChannel() final;
 
   bool
-  isListening() const override
+  isListening() const final
   {
     return m_acceptor.is_open();
   }
 
   size_t
-  size() const override
+  size() const final
   {
     return m_size;
   }
diff --git a/daemon/face/unix-stream-factory.hpp b/daemon/face/unix-stream-factory.hpp
index 8e4bee5..45be220 100644
--- a/daemon/face/unix-stream-factory.hpp
+++ b/daemon/face/unix-stream-factory.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -34,7 +34,7 @@
 
 /** \brief Protocol factory for stream-oriented Unix sockets
  */
-class UnixStreamFactory : public ProtocolFactory
+class UnixStreamFactory final : public ProtocolFactory
 {
 public:
   static const std::string&
@@ -60,10 +60,10 @@
    */
   void
   doProcessConfig(OptionalConfigSection configSection,
-                  FaceSystem::ConfigContext& context) override;
+                  FaceSystem::ConfigContext& context) final;
 
   std::vector<shared_ptr<const Channel>>
-  doGetChannels() const override;
+  doGetChannels() const final;
 
 private:
   bool m_wantCongestionMarking = false;
diff --git a/daemon/face/websocket-channel.hpp b/daemon/face/websocket-channel.hpp
index 1409289..1729841 100644
--- a/daemon/face/websocket-channel.hpp
+++ b/daemon/face/websocket-channel.hpp
@@ -40,7 +40,7 @@
 /**
  * \brief Class implementing WebSocket-based channel to create faces
  */
-class WebSocketChannel : public Channel
+class WebSocketChannel final : public Channel
 {
 public:
   /**
@@ -54,13 +54,13 @@
   WebSocketChannel(const websocket::Endpoint& localEndpoint);
 
   bool
-  isListening() const override
+  isListening() const final
   {
     return m_server.is_listening();
   }
 
   size_t
-  size() const override
+  size() const final
   {
     return m_channelFaces.size();
   }
diff --git a/daemon/face/websocket-factory.hpp b/daemon/face/websocket-factory.hpp
index a4b6a46..721a1eb 100644
--- a/daemon/face/websocket-factory.hpp
+++ b/daemon/face/websocket-factory.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -34,7 +34,7 @@
 
 /** \brief Protocol factory for WebSocket
  */
-class WebSocketFactory : public ProtocolFactory
+class WebSocketFactory final : public ProtocolFactory
 {
 public:
   static const std::string&
@@ -62,10 +62,10 @@
    */
   void
   doProcessConfig(OptionalConfigSection configSection,
-                  FaceSystem::ConfigContext& context) override;
+                  FaceSystem::ConfigContext& context) final;
 
   std::vector<shared_ptr<const Channel>>
-  doGetChannels() const override;
+  doGetChannels() const final;
 
 private:
   std::map<websocket::Endpoint, shared_ptr<WebSocketChannel>> m_channels;
diff --git a/daemon/fw/access-strategy.hpp b/daemon/fw/access-strategy.hpp
index d6688fc..0f83a64 100644
--- a/daemon/fw/access-strategy.hpp
+++ b/daemon/fw/access-strategy.hpp
@@ -68,7 +68,7 @@
 
   /** \brief StrategyInfo on PIT entry
    */
-  class PitInfo : public StrategyInfo
+  class PitInfo final : public StrategyInfo
   {
   public:
     static constexpr int
@@ -83,7 +83,7 @@
 
   /** \brief StrategyInfo in measurements table
    */
-  class MtInfo : public StrategyInfo
+  class MtInfo final : public StrategyInfo
   {
   public:
     static constexpr int
diff --git a/daemon/fw/asf-measurements.hpp b/daemon/fw/asf-measurements.hpp
index 14039f6..3a315c9 100644
--- a/daemon/fw/asf-measurements.hpp
+++ b/daemon/fw/asf-measurements.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2019,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -125,7 +125,7 @@
 
 /** \brief Stores strategy information about each face in this namespace
  */
-class NamespaceInfo : public StrategyInfo
+class NamespaceInfo final : public StrategyInfo
 {
 public:
   static constexpr int
diff --git a/daemon/fw/retx-suppression-exponential.cpp b/daemon/fw/retx-suppression-exponential.cpp
index c634173..7d0749e 100644
--- a/daemon/fw/retx-suppression-exponential.cpp
+++ b/daemon/fw/retx-suppression-exponential.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2019,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -32,7 +32,7 @@
 const RetxSuppressionExponential::Duration RetxSuppressionExponential::DEFAULT_MAX_INTERVAL = 250_ms;
 const float RetxSuppressionExponential::DEFAULT_MULTIPLIER = 2.0f;
 
-class RetxSuppressionExponential::PitInfo : public StrategyInfo
+class RetxSuppressionExponential::PitInfo final : public StrategyInfo
 {
 public:
   static constexpr int
diff --git a/daemon/fw/self-learning-strategy.hpp b/daemon/fw/self-learning-strategy.hpp
index 9b01005..7ffefc2 100644
--- a/daemon/fw/self-learning-strategy.hpp
+++ b/daemon/fw/self-learning-strategy.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2020,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -50,7 +50,7 @@
   getStrategyName();
 
   /// StrategyInfo on pit::InRecord
-  class InRecordInfo : public StrategyInfo
+  class InRecordInfo final : public StrategyInfo
   {
   public:
     static constexpr int
@@ -64,7 +64,7 @@
   };
 
   /// StrategyInfo on pit::OutRecord
-  class OutRecordInfo : public StrategyInfo
+  class OutRecordInfo final : public StrategyInfo
   {
   public:
     static constexpr int
diff --git a/daemon/fw/unsolicited-data-policy.hpp b/daemon/fw/unsolicited-data-policy.hpp
index 766db38..5d562a1 100644
--- a/daemon/fw/unsolicited-data-policy.hpp
+++ b/daemon/fw/unsolicited-data-policy.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2016,  Regents of the University of California,
+/*
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -87,7 +87,7 @@
 
 /** \brief drops all unsolicited Data
  */
-class DropAllUnsolicitedDataPolicy : public UnsolicitedDataPolicy
+class DropAllUnsolicitedDataPolicy final : public UnsolicitedDataPolicy
 {
 public:
   UnsolicitedDataDecision
@@ -99,7 +99,7 @@
 
 /** \brief admits unsolicited Data from local faces
  */
-class AdmitLocalUnsolicitedDataPolicy : public UnsolicitedDataPolicy
+class AdmitLocalUnsolicitedDataPolicy final : public UnsolicitedDataPolicy
 {
 public:
   UnsolicitedDataDecision
@@ -111,7 +111,7 @@
 
 /** \brief admits unsolicited Data from non-local faces
  */
-class AdmitNetworkUnsolicitedDataPolicy : public UnsolicitedDataPolicy
+class AdmitNetworkUnsolicitedDataPolicy final : public UnsolicitedDataPolicy
 {
 public:
   UnsolicitedDataDecision
@@ -123,7 +123,7 @@
 
 /** \brief admits all unsolicited Data
  */
-class AdmitAllUnsolicitedDataPolicy : public UnsolicitedDataPolicy
+class AdmitAllUnsolicitedDataPolicy final : public UnsolicitedDataPolicy
 {
 public:
   UnsolicitedDataDecision
@@ -133,9 +133,9 @@
   static const std::string POLICY_NAME;
 };
 
-/** \brief the default UnsolicitedDataPolicy
+/** \brief The default UnsolicitedDataPolicy
  */
-typedef DropAllUnsolicitedDataPolicy DefaultUnsolicitedDataPolicy;
+using DefaultUnsolicitedDataPolicy = DropAllUnsolicitedDataPolicy;
 
 } // namespace fw
 } // namespace nfd
diff --git a/daemon/mgmt/command-authenticator.cpp b/daemon/mgmt/command-authenticator.cpp
index 833400c..db50e4d 100644
--- a/daemon/mgmt/command-authenticator.cpp
+++ b/daemon/mgmt/command-authenticator.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2020,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -65,7 +65,7 @@
 
 /** \brief a validation policy that only permits Interest signed by a trust anchor
  */
-class CommandAuthenticatorValidationPolicy : public security::ValidationPolicy
+class CommandAuthenticatorValidationPolicy final : public security::ValidationPolicy
 {
 public:
   void
@@ -87,8 +87,8 @@
   }
 
   void
-  checkPolicy(const Data& data, const shared_ptr<security::ValidationState>& state,
-              const ValidationContinuation& continueValidation) final
+  checkPolicy(const Data&, const shared_ptr<security::ValidationState>&,
+              const ValidationContinuation&) final
   {
     // Non-certificate Data are not handled by CommandAuthenticator.
     // Non-anchor certificates cannot be retrieved by offline fetcher.
diff --git a/daemon/mgmt/cs-manager.hpp b/daemon/mgmt/cs-manager.hpp
index 83db017..95fbffc 100644
--- a/daemon/mgmt/cs-manager.hpp
+++ b/daemon/mgmt/cs-manager.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2019,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -40,7 +40,7 @@
  * \brief Implements the CS Management of NFD Management Protocol.
  * \sa https://redmine.named-data.net/projects/nfd/wiki/CsMgmt
  */
-class CsManager : public ManagerBase
+class CsManager final : public ManagerBase
 {
 public:
   CsManager(cs::Cs& cs, const ForwarderCounters& fwCounters,
diff --git a/daemon/mgmt/face-manager.hpp b/daemon/mgmt/face-manager.hpp
index c1547c5..db2e5aa 100644
--- a/daemon/mgmt/face-manager.hpp
+++ b/daemon/mgmt/face-manager.hpp
@@ -36,7 +36,7 @@
  * @brief Implements the Face Management of NFD Management Protocol.
  * @sa https://redmine.named-data.net/projects/nfd/wiki/FaceMgmt
  */
-class FaceManager : public ManagerBase
+class FaceManager final : public ManagerBase
 {
 public:
   FaceManager(FaceSystem& faceSystem,
diff --git a/daemon/mgmt/fib-manager.hpp b/daemon/mgmt/fib-manager.hpp
index 073fe43..ca04391 100644
--- a/daemon/mgmt/fib-manager.hpp
+++ b/daemon/mgmt/fib-manager.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2019,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -40,7 +40,7 @@
  * @brief Implements the FIB Management of NFD Management Protocol.
  * @sa https://redmine.named-data.net/projects/nfd/wiki/FibMgmt
  */
-class FibManager : public ManagerBase
+class FibManager final : public ManagerBase
 {
 public:
   FibManager(fib::Fib& fib, const FaceTable& faceTable,
diff --git a/daemon/mgmt/rib-manager.hpp b/daemon/mgmt/rib-manager.hpp
index 3b2e794..98739f0 100644
--- a/daemon/mgmt/rib-manager.hpp
+++ b/daemon/mgmt/rib-manager.hpp
@@ -46,7 +46,7 @@
  * @brief Implements the RIB Management of NFD Management Protocol.
  * @sa https://redmine.named-data.net/projects/nfd/wiki/RibMgmt
  */
-class RibManager : public ManagerBase
+class RibManager final : public ManagerBase
 {
 public:
   RibManager(rib::Rib& rib, ndn::Face& face, ndn::KeyChain& keyChain,
@@ -220,7 +220,7 @@
   setFaceForSelfRegistration(const Interest& request, ControlParameters& parameters);
 
   ndn::mgmt::Authorization
-  makeAuthorization(const std::string& verb) override;
+  makeAuthorization(const std::string& verb) final;
 
 private: // Face monitor
   void
diff --git a/daemon/mgmt/strategy-choice-manager.hpp b/daemon/mgmt/strategy-choice-manager.hpp
index 370364b..6c91af8 100644
--- a/daemon/mgmt/strategy-choice-manager.hpp
+++ b/daemon/mgmt/strategy-choice-manager.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2019,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -38,7 +38,7 @@
  * @brief Implements the Strategy Choice Management of NFD Management Protocol.
  * @sa https://redmine.named-data.net/projects/nfd/wiki/StrategyChoice
  */
-class StrategyChoiceManager : public ManagerBase
+class StrategyChoiceManager final : public ManagerBase
 {
 public:
   StrategyChoiceManager(strategy_choice::StrategyChoice& table,
diff --git a/daemon/table/cs-policy-lru.hpp b/daemon/table/cs-policy-lru.hpp
index 017de7e..5d61e47 100644
--- a/daemon/table/cs-policy-lru.hpp
+++ b/daemon/table/cs-policy-lru.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2019,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -46,7 +46,7 @@
 
 /** \brief Least-Recently-Used (LRU) replacement policy
  */
-class LruPolicy : public Policy
+class LruPolicy final : public Policy
 {
 public:
   LruPolicy();
@@ -56,19 +56,19 @@
 
 private:
   void
-  doAfterInsert(EntryRef i) override;
+  doAfterInsert(EntryRef i) final;
 
   void
-  doAfterRefresh(EntryRef i) override;
+  doAfterRefresh(EntryRef i) final;
 
   void
-  doBeforeErase(EntryRef i) override;
+  doBeforeErase(EntryRef i) final;
 
   void
-  doBeforeUse(EntryRef i) override;
+  doBeforeUse(EntryRef i) final;
 
   void
-  evictEntries() override;
+  evictEntries() final;
 
 private:
   /** \brief moves an entry to the end of queue
diff --git a/daemon/table/cs-policy-priority-fifo.hpp b/daemon/table/cs-policy-priority-fifo.hpp
index 9671408..757b0c5 100644
--- a/daemon/table/cs-policy-priority-fifo.hpp
+++ b/daemon/table/cs-policy-priority-fifo.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2019,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -62,31 +62,31 @@
  *  Eviction procedure exhausts the first queue before moving onto the next queue,
  *  in the order of unsolicited, stale, and fresh queue.
  */
-class PriorityFifoPolicy : public Policy
+class PriorityFifoPolicy final : public Policy
 {
 public:
   PriorityFifoPolicy();
 
-  ~PriorityFifoPolicy() override;
+  ~PriorityFifoPolicy() final;
 
 public:
   static const std::string POLICY_NAME;
 
 private:
   void
-  doAfterInsert(EntryRef i) override;
+  doAfterInsert(EntryRef i) final;
 
   void
-  doAfterRefresh(EntryRef i) override;
+  doAfterRefresh(EntryRef i) final;
 
   void
-  doBeforeErase(EntryRef i) override;
+  doBeforeErase(EntryRef i) final;
 
   void
-  doBeforeUse(EntryRef i) override;
+  doBeforeUse(EntryRef i) final;
 
   void
-  evictEntries() override;
+  evictEntries() final;
 
 private:
   /** \brief evicts one entry
diff --git a/daemon/table/name-tree-iterator.hpp b/daemon/table/name-tree-iterator.hpp
index 973c961..d99e5f9 100644
--- a/daemon/table/name-tree-iterator.hpp
+++ b/daemon/table/name-tree-iterator.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Regents of the University of California,
+ * Copyright (c) 2014-2021,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -158,13 +158,13 @@
 
 /** \brief full enumeration implementation
  */
-class FullEnumerationImpl : public EnumerationImpl
+class FullEnumerationImpl final : public EnumerationImpl
 {
 public:
   FullEnumerationImpl(const NameTree& nt, const EntrySelector& pred);
 
   void
-  advance(Iterator& i) override;
+  advance(Iterator& i) final;
 
 private:
   EntrySelector m_pred;
@@ -175,13 +175,13 @@
  *  Iterator::m_ref should be initialized to subtree root.
  *  Iterator::m_state LSB indicates whether to visit children of m_entry.
  */
-class PartialEnumerationImpl : public EnumerationImpl
+class PartialEnumerationImpl final : public EnumerationImpl
 {
 public:
   PartialEnumerationImpl(const NameTree& nt, const EntrySubTreeSelector& pred);
 
   void
-  advance(Iterator& i) override;
+  advance(Iterator& i) final;
 
 private:
   EntrySubTreeSelector m_pred;
@@ -191,14 +191,14 @@
  *
  *  Iterator::m_ref should be initialized to longest prefix matched entry.
  */
-class PrefixMatchImpl : public EnumerationImpl
+class PrefixMatchImpl final : public EnumerationImpl
 {
 public:
   PrefixMatchImpl(const NameTree& nt, const EntrySelector& pred);
 
 private:
   void
-  advance(Iterator& i) override;
+  advance(Iterator& i) final;
 
 private:
   EntrySelector m_pred;