Use more C++17 features

Mainly structured bindings, inline variables, and class template
argument deduction, plus many more smaller things.

Change-Id: I810d17e0adb470426e4e30c898e03b3140ad052f
diff --git a/daemon/fw/access-strategy.cpp b/daemon/fw/access-strategy.cpp
index e1443df..e80c581 100644
--- a/daemon/fw/access-strategy.cpp
+++ b/daemon/fw/access-strategy.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  Regents of the University of California,
+ * Copyright (c) 2014-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -60,8 +60,7 @@
 AccessStrategy::afterReceiveInterest(const Interest& interest, const FaceEndpoint& ingress,
                                      const shared_ptr<pit::Entry>& pitEntry)
 {
-  auto suppressResult = m_retxSuppression.decidePerPitEntry(*pitEntry);
-  switch (suppressResult) {
+  switch (auto res = m_retxSuppression.decidePerPitEntry(*pitEntry); res) {
   case RetxSuppressionResult::NEW:
     return afterReceiveNewInterest(interest, ingress, pitEntry);
   case RetxSuppressionResult::FORWARD:
@@ -77,9 +76,7 @@
                                         const shared_ptr<pit::Entry>& pitEntry)
 {
   const auto& fibEntry = this->lookupFib(*pitEntry);
-  Name miName;
-  MtInfo* mi = nullptr;
-  std::tie(miName, mi) = this->findPrefixMeasurements(*pitEntry);
+  auto [miName, mi] = this->findPrefixMeasurements(*pitEntry);
 
   // has measurements for Interest Name?
   if (mi != nullptr) {
@@ -236,10 +233,7 @@
 void
 AccessStrategy::updateMeasurements(const Face& inFace, const Data& data, time::nanoseconds rtt)
 {
-  auto ret = m_fit.emplace(std::piecewise_construct,
-                           std::forward_as_tuple(inFace.getId()),
-                           std::forward_as_tuple(m_rttEstimatorOpts));
-  FaceInfo& fi = ret.first->second;
+  FaceInfo& fi = m_fit.try_emplace(inFace.getId(), m_rttEstimatorOpts).first->second;
   fi.rtt.addMeasurement(rtt);
 
   MtInfo* mi = this->addPrefixMeasurements(data);
@@ -257,14 +251,14 @@
 {
   auto me = this->getMeasurements().findLongestPrefixMatch(pitEntry);
   if (me == nullptr) {
-    return std::make_tuple(Name(), nullptr);
+    return {Name{}, nullptr};
   }
 
   auto mi = me->getStrategyInfo<MtInfo>();
   // TODO: after a runtime strategy change, it's possible that a measurements::Entry exists but
   //       the corresponding MtInfo doesn't exist (mi == nullptr); this case needs another longest
   //       prefix match until an MtInfo is found.
-  return std::make_tuple(me->getName(), mi);
+  return {me->getName(), mi};
 }
 
 AccessStrategy::MtInfo*
diff --git a/daemon/fw/asf-measurements.cpp b/daemon/fw/asf-measurements.cpp
index 2eb81dd..c49f5d5 100644
--- a/daemon/fw/asf-measurements.cpp
+++ b/daemon/fw/asf-measurements.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  Regents of the University of California,
+ * Copyright (c) 2014-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -30,9 +30,6 @@
 namespace fw {
 namespace asf {
 
-const time::nanoseconds FaceInfo::RTT_NO_MEASUREMENT{-1};
-const time::nanoseconds FaceInfo::RTT_TIMEOUT{-2};
-
 time::nanoseconds
 FaceInfo::scheduleTimeout(const Name& interestName, scheduler::EventCallback cb)
 {
@@ -63,11 +60,9 @@
 FaceInfo&
 NamespaceInfo::getOrCreateFaceInfo(FaceId faceId)
 {
-  auto ret = m_fiMap.emplace(std::piecewise_construct,
-                             std::forward_as_tuple(faceId),
-                             std::forward_as_tuple(m_rttEstimatorOpts));
-  auto& faceInfo = ret.first->second;
-  if (ret.second) {
+  auto [it, isNew] = m_fiMap.try_emplace(faceId, m_rttEstimatorOpts);
+  auto& faceInfo = it->second;
+  if (isNew) {
     extendFaceInfoLifetime(faceInfo, faceId);
   }
   return faceInfo;
@@ -83,8 +78,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////
 
-constexpr time::microseconds AsfMeasurements::MEASUREMENTS_LIFETIME;
-
 AsfMeasurements::AsfMeasurements(MeasurementsAccessor& measurements)
   : m_measurements(measurements)
   , m_rttEstimatorOpts(make_shared<ndn::util::RttEstimator::Options>())
diff --git a/daemon/fw/asf-measurements.hpp b/daemon/fw/asf-measurements.hpp
index a3eafc9..1d2b90f 100644
--- a/daemon/fw/asf-measurements.hpp
+++ b/daemon/fw/asf-measurements.hpp
@@ -105,8 +105,8 @@
   }
 
 public:
-  static const time::nanoseconds RTT_NO_MEASUREMENT;
-  static const time::nanoseconds RTT_TIMEOUT;
+  static constexpr time::nanoseconds RTT_NO_MEASUREMENT = -1_ns;
+  static constexpr time::nanoseconds RTT_TIMEOUT = -2_ns;
 
 private:
   ndn::util::RttEstimator m_rttEstimator;
diff --git a/daemon/fw/asf-probing-module.cpp b/daemon/fw/asf-probing-module.cpp
index 425b39c..0df1712 100644
--- a/daemon/fw/asf-probing-module.cpp
+++ b/daemon/fw/asf-probing-module.cpp
@@ -33,11 +33,7 @@
 namespace fw {
 namespace asf {
 
-constexpr time::milliseconds ProbingModule::DEFAULT_PROBING_INTERVAL;
-constexpr time::milliseconds ProbingModule::MIN_PROBING_INTERVAL;
-
-static_assert(ProbingModule::DEFAULT_PROBING_INTERVAL < AsfMeasurements::MEASUREMENTS_LIFETIME,
-              "ProbingModule::DEFAULT_PROBING_INTERVAL must be less than AsfMeasurements::MEASUREMENTS_LIFETIME");
+static_assert(ProbingModule::DEFAULT_PROBING_INTERVAL < AsfMeasurements::MEASUREMENTS_LIFETIME);
 
 ProbingModule::ProbingModule(AsfMeasurements& measurements)
   : m_probingInterval(DEFAULT_PROBING_INTERVAL)
diff --git a/daemon/fw/face-table.cpp b/daemon/fw/face-table.cpp
index 49d33b6..93567bf 100644
--- a/daemon/fw/face-table.cpp
+++ b/daemon/fw/face-table.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-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -76,19 +76,20 @@
 }
 
 void
-FaceTable::addImpl(shared_ptr<Face> face, FaceId faceId)
+FaceTable::addImpl(shared_ptr<Face> facePtr, FaceId faceId)
 {
-  face->setId(faceId);
-  auto ret = m_faces.emplace(faceId, face);
-  BOOST_VERIFY(ret.second);
+  facePtr->setId(faceId);
+  auto [it, isNew] = m_faces.try_emplace(faceId, std::move(facePtr));
+  BOOST_VERIFY(isNew);
+  auto& face = *it->second;
 
   NFD_LOG_INFO("Added face id=" << faceId <<
-               " remote=" << face->getRemoteUri() <<
-               " local=" << face->getLocalUri());
+               " remote=" << face.getRemoteUri() <<
+               " local=" << face.getLocalUri());
 
-  connectFaceClosedSignal(*face, [=] { remove(faceId); });
+  connectFaceClosedSignal(face, [this, faceId] { remove(faceId); });
 
-  this->afterAdd(*face);
+  this->afterAdd(face);
 }
 
 void
diff --git a/daemon/fw/forwarder.hpp b/daemon/fw/forwarder.hpp
index 47c6e03..cad9396 100644
--- a/daemon/fw/forwarder.hpp
+++ b/daemon/fw/forwarder.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  Regents of the University of California,
+ * Copyright (c) 2014-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -251,7 +251,7 @@
   NetworkRegionTable m_networkRegionTable;
 
   // allow Strategy (base class) to enter pipelines
-  friend class fw::Strategy;
+  friend fw::Strategy;
 };
 
 } // namespace nfd
diff --git a/daemon/fw/retx-suppression-exponential.cpp b/daemon/fw/retx-suppression-exponential.cpp
index 114b491..6158120 100644
--- a/daemon/fw/retx-suppression-exponential.cpp
+++ b/daemon/fw/retx-suppression-exponential.cpp
@@ -24,14 +24,11 @@
  */
 
 #include "retx-suppression-exponential.hpp"
+#include "algorithm.hpp"
 
 namespace nfd {
 namespace fw {
 
-const RetxSuppressionExponential::Duration RetxSuppressionExponential::DEFAULT_INITIAL_INTERVAL = 10_ms;
-const RetxSuppressionExponential::Duration RetxSuppressionExponential::DEFAULT_MAX_INTERVAL = 250_ms;
-const float RetxSuppressionExponential::DEFAULT_MULTIPLIER = 2.0f;
-
 namespace {
 
 class PitInfo final : public StrategyInfo
diff --git a/daemon/fw/retx-suppression-exponential.hpp b/daemon/fw/retx-suppression-exponential.hpp
index 3c3be60..41d5bdb 100644
--- a/daemon/fw/retx-suppression-exponential.hpp
+++ b/daemon/fw/retx-suppression-exponential.hpp
@@ -26,7 +26,6 @@
 #ifndef NFD_DAEMON_FW_RETX_SUPPRESSION_EXPONENTIAL_HPP
 #define NFD_DAEMON_FW_RETX_SUPPRESSION_EXPONENTIAL_HPP
 
-#include "algorithm.hpp"
 #include "retx-suppression.hpp"
 #include "strategy.hpp"
 
@@ -83,9 +82,9 @@
   }
 
 public:
-  static const Duration DEFAULT_INITIAL_INTERVAL;
-  static const Duration DEFAULT_MAX_INTERVAL;
-  static const float DEFAULT_MULTIPLIER;
+  static constexpr Duration DEFAULT_INITIAL_INTERVAL = 10_ms;
+  static constexpr Duration DEFAULT_MAX_INTERVAL = 250_ms;
+  static constexpr float DEFAULT_MULTIPLIER = 2.0f;
 
 NFD_PUBLIC_WITH_TESTS_ELSE_PRIVATE:
   const Duration m_initialInterval;
diff --git a/daemon/fw/retx-suppression-fixed.cpp b/daemon/fw/retx-suppression-fixed.cpp
index 50ade91..790ce45 100644
--- a/daemon/fw/retx-suppression-fixed.cpp
+++ b/daemon/fw/retx-suppression-fixed.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  Regents of the University of California,
+ * Copyright (c) 2014-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -24,12 +24,11 @@
  */
 
 #include "retx-suppression-fixed.hpp"
+#include "algorithm.hpp"
 
 namespace nfd {
 namespace fw {
 
-const time::milliseconds RetxSuppressionFixed::DEFAULT_MIN_RETX_INTERVAL = 100_ms;
-
 RetxSuppressionFixed::RetxSuppressionFixed(const time::milliseconds& minRetxInterval)
   : m_minRetxInterval(minRetxInterval)
 {
diff --git a/daemon/fw/retx-suppression-fixed.hpp b/daemon/fw/retx-suppression-fixed.hpp
index 33ee765..e8af73b 100644
--- a/daemon/fw/retx-suppression-fixed.hpp
+++ b/daemon/fw/retx-suppression-fixed.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017,  Regents of the University of California,
+ * Copyright (c) 2014-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -26,8 +26,8 @@
 #ifndef NFD_DAEMON_FW_RETX_SUPPRESSION_FIXED_HPP
 #define NFD_DAEMON_FW_RETX_SUPPRESSION_FIXED_HPP
 
-#include "algorithm.hpp"
 #include "retx-suppression.hpp"
+#include "table/pit-entry.hpp"
 
 namespace nfd {
 namespace fw {
@@ -48,7 +48,7 @@
   decidePerPitEntry(pit::Entry& pitEntry) const;
 
 public:
-  static const time::milliseconds DEFAULT_MIN_RETX_INTERVAL;
+  static constexpr time::milliseconds DEFAULT_MIN_RETX_INTERVAL = 100_ms;
 
 private:
   const time::milliseconds m_minRetxInterval;
diff --git a/daemon/fw/self-learning-strategy.cpp b/daemon/fw/self-learning-strategy.cpp
index 89ca397..db58050 100644
--- a/daemon/fw/self-learning-strategy.cpp
+++ b/daemon/fw/self-learning-strategy.cpp
@@ -42,7 +42,7 @@
 NFD_LOG_INIT(SelfLearningStrategy);
 NFD_REGISTER_STRATEGY(SelfLearningStrategy);
 
-const time::milliseconds SelfLearningStrategy::ROUTE_RENEW_LIFETIME(10_min);
+constexpr time::milliseconds ROUTE_RENEW_LIFETIME = 10_min;
 
 SelfLearningStrategy::SelfLearningStrategy(Forwarder& forwarder, const Name& name)
   : Strategy(forwarder)
@@ -191,11 +191,11 @@
   // (the PIT entry's expiry timer was set to 0 before dispatching)
   this->setExpiryTimer(pitEntry, 1_s);
 
-  runOnRibIoService([pitEntryWeak = weak_ptr<pit::Entry>{pitEntry}, inFaceId = inFace.getId(), data, this] {
+  runOnRibIoService([this, pitEntryWeak = weak_ptr<pit::Entry>{pitEntry}, inFaceId = inFace.getId(), data] {
     rib::Service::get().getRibManager().slFindAnn(data.getName(),
-      [pitEntryWeak, inFaceId, data, this] (std::optional<ndn::PrefixAnnouncement> paOpt) {
+      [this, pitEntryWeak, inFaceId, data] (std::optional<ndn::PrefixAnnouncement> paOpt) {
         if (paOpt) {
-          runOnMainIoService([pitEntryWeak, inFaceId, data, pa = std::move(*paOpt), this] {
+          runOnMainIoService([this, pitEntryWeak, inFaceId, data, pa = std::move(*paOpt)] {
             auto pitEntry = pitEntryWeak.lock();
             auto inFace = this->getFace(inFaceId);
             if (pitEntry && inFace) {
diff --git a/daemon/fw/self-learning-strategy.hpp b/daemon/fw/self-learning-strategy.hpp
index bb4f6f7..47e59af 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-2021,  Regents of the University of California,
+ * Copyright (c) 2014-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -136,9 +136,6 @@
    */
   void
   renewRoute(const Name& name, FaceId inFaceId, time::milliseconds maxLifetime);
-
-private:
-  static const time::milliseconds ROUTE_RENEW_LIFETIME;
 };
 
 } // namespace fw
diff --git a/daemon/fw/strategy.hpp b/daemon/fw/strategy.hpp
index 4e162bd..570f219 100644
--- a/daemon/fw/strategy.hpp
+++ b/daemon/fw/strategy.hpp
@@ -52,11 +52,10 @@
   {
     BOOST_ASSERT(strategyName.size() > 1);
     BOOST_ASSERT(strategyName.at(-1).isVersion());
-    Registry& registry = getRegistry();
-    BOOST_ASSERT(registry.count(strategyName) == 0);
-    registry[strategyName] = [] (auto&&... args) {
+    auto r = getRegistry().insert_or_assign(strategyName, [] (auto&&... args) {
       return make_unique<S>(std::forward<decltype(args)>(args)...);
-    };
+    });
+    BOOST_VERIFY(r.second);
   }
 
   /** \return Whether a strategy instance can be created from \p instanceName
diff --git a/daemon/fw/unsolicited-data-policy.cpp b/daemon/fw/unsolicited-data-policy.cpp
index 8cf59d9..b29b827 100644
--- a/daemon/fw/unsolicited-data-policy.cpp
+++ b/daemon/fw/unsolicited-data-policy.cpp
@@ -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-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -24,6 +24,7 @@
  */
 
 #include "unsolicited-data-policy.hpp"
+
 #include <boost/range/adaptor/map.hpp>
 #include <boost/range/algorithm/copy.hpp>
 
@@ -70,7 +71,7 @@
 NFD_REGISTER_UNSOLICITED_DATA_POLICY(DropAllUnsolicitedDataPolicy);
 
 UnsolicitedDataDecision
-DropAllUnsolicitedDataPolicy::decide(const Face& inFace, const Data& data) const
+DropAllUnsolicitedDataPolicy::decide(const Face&, const Data&) const
 {
   return UnsolicitedDataDecision::DROP;
 }
@@ -79,7 +80,7 @@
 NFD_REGISTER_UNSOLICITED_DATA_POLICY(AdmitLocalUnsolicitedDataPolicy);
 
 UnsolicitedDataDecision
-AdmitLocalUnsolicitedDataPolicy::decide(const Face& inFace, const Data& data) const
+AdmitLocalUnsolicitedDataPolicy::decide(const Face& inFace, const Data&) const
 {
   if (inFace.getScope() == ndn::nfd::FACE_SCOPE_LOCAL) {
     return UnsolicitedDataDecision::CACHE;
@@ -91,7 +92,7 @@
 NFD_REGISTER_UNSOLICITED_DATA_POLICY(AdmitNetworkUnsolicitedDataPolicy);
 
 UnsolicitedDataDecision
-AdmitNetworkUnsolicitedDataPolicy::decide(const Face& inFace, const Data& data) const
+AdmitNetworkUnsolicitedDataPolicy::decide(const Face& inFace, const Data&) const
 {
   if (inFace.getScope() == ndn::nfd::FACE_SCOPE_NON_LOCAL) {
     return UnsolicitedDataDecision::CACHE;
@@ -103,7 +104,7 @@
 NFD_REGISTER_UNSOLICITED_DATA_POLICY(AdmitAllUnsolicitedDataPolicy);
 
 UnsolicitedDataDecision
-AdmitAllUnsolicitedDataPolicy::decide(const Face& inFace, const Data& data) const
+AdmitAllUnsolicitedDataPolicy::decide(const Face&, const Data&) const
 {
   return UnsolicitedDataDecision::CACHE;
 }
diff --git a/daemon/fw/unsolicited-data-policy.hpp b/daemon/fw/unsolicited-data-policy.hpp
index 5d562a1..486903a 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-2021,  Regents of the University of California,
+ * Copyright (c) 2014-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -31,7 +31,8 @@
 namespace nfd {
 namespace fw {
 
-/** \brief a decision made by UnsolicitedDataPolicy
+/**
+ * \brief Decision made by UnsolicitedDataPolicy
  */
 enum class UnsolicitedDataDecision {
   DROP, ///< the Data should be dropped
@@ -41,11 +42,12 @@
 std::ostream&
 operator<<(std::ostream& os, UnsolicitedDataDecision d);
 
-/** \brief determines how to process an unsolicited Data
+/**
+ * \brief Determines how to process an unsolicited Data packet
  *
- *  An incoming Data is unsolicited if it does not match any PIT entry.
- *  This class assists forwarding pipelines to decide whether to drop an unsolicited Data
- *  or admit it into the ContentStore.
+ * An incoming Data packet is *unsolicited* if it does not match any PIT entry.
+ * This class assists forwarding pipelines to decide whether to drop an unsolicited Data
+ * or admit it into the ContentStore.
  */
 class UnsolicitedDataPolicy : noncopyable
 {
@@ -61,9 +63,9 @@
   static void
   registerPolicy(const std::string& policyName = P::POLICY_NAME)
   {
-    Registry& registry = getRegistry();
-    BOOST_ASSERT(registry.count(policyName) == 0);
-    registry[policyName] = [] { return make_unique<P>(); };
+    BOOST_ASSERT(!policyName.empty());
+    auto r = getRegistry().insert_or_assign(policyName, [] { return make_unique<P>(); });
+    BOOST_VERIFY(r.second);
   }
 
   /** \return an UnsolicitedDataPolicy identified by \p policyName,
@@ -78,14 +80,15 @@
   getPolicyNames();
 
 private:
-  typedef std::function<unique_ptr<UnsolicitedDataPolicy>()> CreateFunc;
-  typedef std::map<std::string, CreateFunc> Registry; // indexed by policy name
+  using CreateFunc = std::function<unique_ptr<UnsolicitedDataPolicy>()>;
+  using Registry = std::map<std::string, CreateFunc>; // indexed by policy name
 
   static Registry&
   getRegistry();
 };
 
-/** \brief drops all unsolicited Data
+/**
+ * \brief Drops all unsolicited Data
  */
 class DropAllUnsolicitedDataPolicy final : public UnsolicitedDataPolicy
 {
@@ -97,7 +100,8 @@
   static const std::string POLICY_NAME;
 };
 
-/** \brief admits unsolicited Data from local faces
+/**
+ * \brief Admits unsolicited Data from local faces
  */
 class AdmitLocalUnsolicitedDataPolicy final : public UnsolicitedDataPolicy
 {
@@ -109,7 +113,8 @@
   static const std::string POLICY_NAME;
 };
 
-/** \brief admits unsolicited Data from non-local faces
+/**
+ * \brief Admits unsolicited Data from non-local faces
  */
 class AdmitNetworkUnsolicitedDataPolicy final : public UnsolicitedDataPolicy
 {
@@ -121,7 +126,8 @@
   static const std::string POLICY_NAME;
 };
 
-/** \brief admits all unsolicited Data
+/**
+ * \brief Admits all unsolicited Data
  */
 class AdmitAllUnsolicitedDataPolicy final : public UnsolicitedDataPolicy
 {
@@ -133,16 +139,18 @@
   static const std::string POLICY_NAME;
 };
 
-/** \brief The default UnsolicitedDataPolicy
+/**
+ * \brief The default UnsolicitedDataPolicy
  */
 using DefaultUnsolicitedDataPolicy = DropAllUnsolicitedDataPolicy;
 
 } // namespace fw
 } // namespace nfd
 
-/** \brief registers an unsolicited data policy
- *  \param P a subclass of nfd::fw::UnsolicitedDataPolicy;
- *           P::POLICY_NAME must be a string that contains policy name
+/**
+ * \brief Registers an unsolicited data policy
+ * \param P A subclass of nfd::fw::UnsolicitedDataPolicy. \p P must have a static data
+ *          member `POLICY_NAME` convertible to std::string that contains the policy name.
  */
 #define NFD_REGISTER_UNSOLICITED_DATA_POLICY(P)                     \
 static class NfdAuto ## P ## UnsolicitedDataPolicyRegistrationClass \