diff --git a/.waf-tools/compiler-features.py b/.waf-tools/compiler-features.py
index cf41970..39516e6 100644
--- a/.waf-tools/compiler-features.py
+++ b/.waf-tools/compiler-features.py
@@ -43,33 +43,6 @@
                       features='cxx', mandatory=True):
         self.define('HAVE_CXX_FRIEND_TYPENAME_WRAPPER', 1)
 
-OVERRIDE = '''
-class Base
-{
-  virtual void
-  f(int a);
-};
-
-class Derived : public Base
-{
-  virtual void
-  f(int a) override;
-};
-
-class Final : public Derived
-{
-  virtual void
-  f(int a) final;
-};
-'''
-
-@conf
-def check_override(self):
-    if self.check_cxx(msg='Checking for override and final specifiers',
-                      fragment=OVERRIDE,
-                      features='cxx', mandatory=False):
-        self.define('HAVE_CXX_OVERRIDE_FINAL', 1)
-
 STD_TO_STRING = '''
 #include <string>
 int
@@ -118,6 +91,5 @@
 
 def configure(conf):
     conf.check_friend_typename()
-    conf.check_override()
     conf.check_std_to_string()
     conf.check_vector_const_iterators()
diff --git a/docs/code-style.rst b/docs/code-style.rst
index c57fd0a..dff6b86 100644
--- a/docs/code-style.rst
+++ b/docs/code-style.rst
@@ -1126,15 +1126,6 @@
           open() override;
         };
 
-    ndn-cxx declares ``NDN_CXX_DECL_OVERRIDE`` and ``NDN_CXX_DECL_FINAL`` macros that
-    expand to ``override`` and ``final`` if the compiler supports this feature,
-    but expand to nothing with older compilers.
-    These must be used in place of ``override`` and ``final``,
-    so that ndn-cxx remains compatible with older compilers.
-
-    ``NDN_CXX_DECL_OVERRIDE`` and ``NDN_CXX_DECL_FINAL`` macros are for ndn-cxx internal use.
-    Other projects, if adopting this style guide, should define their own macros if needed.
-
 3.31. The recommended way to throw an exception derived from ``std::exception`` is to use
 the ``BOOST_THROW_EXCEPTION``
 `macro <http://www.boost.org/doc/libs/1_42_0/libs/exception/doc/BOOST_THROW_EXCEPTION.html>`__.
diff --git a/docs/doxygen.conf.in b/docs/doxygen.conf.in
index d3d5b2a..2779491 100644
--- a/docs/doxygen.conf.in
+++ b/docs/doxygen.conf.in
@@ -1923,7 +1923,6 @@
                          PUBLIC_WITH_TESTS_ELSE_PRIVATE=private \
                          PROTECTED_WITH_TESTS_ELSE_PRIVATE=private \
                          VIRTUAL_WITH_TESTS \
-                         DECL_OVERRIDE=override \
                          NDN_CXX_KEYCHAIN_REGISTER_PIB \
                          NDN_CXX_KEYCHAIN_REGISTER_TPM
 
diff --git a/src/common.hpp b/src/common.hpp
index a51f58d..bc34cbd 100644
--- a/src/common.hpp
+++ b/src/common.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -44,23 +44,9 @@
 #define NDN_CXX_PROTECTED_WITH_TESTS_ELSE_PRIVATE private
 #endif
 
-/** \def NDN_CXX_DECL_OVERRIDE
- *  \brief expands to 'override' if compiler supports this feature, otherwise expands to nothing
- */
-/** \def NDN_CXX_DECL_FINAL
- *  \brief expands to 'final' if compiler supports this feature, otherwise expands to nothing
- */
-#ifdef NDN_CXX_HAVE_CXX_OVERRIDE_FINAL
-#define NDN_CXX_DECL_OVERRIDE override
-#define NDN_CXX_DECL_FINAL final
-#else
-#define NDN_CXX_DECL_OVERRIDE
-#define NDN_CXX_DECL_FINAL
-#endif
-
 // require C++11
 #if __cplusplus < 201103L && !defined(__GXX_EXPERIMENTAL_CXX0X__)
-#  error "ndn-cxx applications must be compiled using the C++11 standard"
+#  error "ndn-cxx applications must be compiled using the C++11 standard (-std=c++11)"
 #endif
 
 #include <algorithm>
@@ -137,7 +123,7 @@
 
 namespace ndn {
 using boost::noncopyable;
-}
+} // namespace ndn
 
 #include "util/backports.hpp"
 
diff --git a/src/management/nfd-control-parameters.hpp b/src/management/nfd-control-parameters.hpp
index 93b2e41..c5f26d3 100644
--- a/src/management/nfd-control-parameters.hpp
+++ b/src/management/nfd-control-parameters.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -97,10 +97,10 @@
   wireEncode(EncodingImpl<TAG>& encoder) const;
 
   virtual Block
-  wireEncode() const NDN_CXX_DECL_FINAL;
+  wireEncode() const final;
 
   virtual void
-  wireDecode(const Block& wire) NDN_CXX_DECL_FINAL;
+  wireDecode(const Block& wire) final;
 
 public: // getters & setters
 
diff --git a/src/security/pib-memory.hpp b/src/security/pib-memory.hpp
index f21af00..377d52d 100644
--- a/src/security/pib-memory.hpp
+++ b/src/security/pib-memory.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -52,76 +52,76 @@
 public: // TpmLocator management
 
   virtual void
-  setTpmLocator(const std::string& tpmLocator) NDN_CXX_DECL_OVERRIDE;
+  setTpmLocator(const std::string& tpmLocator) override;
 
   virtual std::string
-  getTpmLocator() const NDN_CXX_DECL_OVERRIDE;
+  getTpmLocator() const override;
 
 public: // Identity management
 
   virtual bool
-  hasIdentity(const Name& identity) const NDN_CXX_DECL_OVERRIDE;
+  hasIdentity(const Name& identity) const override;
 
   virtual void
-  addIdentity(const Name& identity) NDN_CXX_DECL_OVERRIDE;
+  addIdentity(const Name& identity) override;
 
   virtual void
-  removeIdentity(const Name& identity) NDN_CXX_DECL_OVERRIDE;
+  removeIdentity(const Name& identity) override;
 
   virtual std::set<Name>
-  getIdentities() const NDN_CXX_DECL_OVERRIDE;
+  getIdentities() const override;
 
   virtual void
-  setDefaultIdentity(const Name& identityName) NDN_CXX_DECL_OVERRIDE;
+  setDefaultIdentity(const Name& identityName) override;
 
   virtual Name
-  getDefaultIdentity() const NDN_CXX_DECL_OVERRIDE;
+  getDefaultIdentity() const override;
 
 public: // Key management
 
   virtual bool
-  hasKey(const Name& identity, const name::Component& keyId) const NDN_CXX_DECL_OVERRIDE;
+  hasKey(const Name& identity, const name::Component& keyId) const override;
 
   virtual void
-  addKey(const Name& identity, const name::Component& keyId, const PublicKey& publicKey) NDN_CXX_DECL_OVERRIDE;
+  addKey(const Name& identity, const name::Component& keyId, const PublicKey& publicKey) override;
 
   virtual void
-  removeKey(const Name& identity, const name::Component& keyId) NDN_CXX_DECL_OVERRIDE;
+  removeKey(const Name& identity, const name::Component& keyId) override;
 
   virtual PublicKey
-  getKeyBits(const Name& identity, const name::Component& keyId) const NDN_CXX_DECL_OVERRIDE;
+  getKeyBits(const Name& identity, const name::Component& keyId) const override;
 
   virtual std::set<name::Component>
-  getKeysOfIdentity(const Name& identity) const NDN_CXX_DECL_OVERRIDE;
+  getKeysOfIdentity(const Name& identity) const override;
 
   virtual void
-  setDefaultKeyOfIdentity(const Name& identity, const name::Component& keyId) NDN_CXX_DECL_OVERRIDE;
+  setDefaultKeyOfIdentity(const Name& identity, const name::Component& keyId) override;
 
   virtual name::Component
-  getDefaultKeyOfIdentity(const Name& identity) const NDN_CXX_DECL_OVERRIDE;
+  getDefaultKeyOfIdentity(const Name& identity) const override;
 
 public: // Certificate management
 
   virtual bool
-  hasCertificate(const Name& certName) const NDN_CXX_DECL_OVERRIDE;
+  hasCertificate(const Name& certName) const override;
 
   virtual void
-  addCertificate(const IdentityCertificate& certificate) NDN_CXX_DECL_OVERRIDE;
+  addCertificate(const IdentityCertificate& certificate) override;
 
   virtual void
-  removeCertificate(const Name& certName) NDN_CXX_DECL_OVERRIDE;
+  removeCertificate(const Name& certName) override;
 
   virtual IdentityCertificate
-  getCertificate(const Name& certName) const NDN_CXX_DECL_OVERRIDE;
+  getCertificate(const Name& certName) const override;
 
   virtual std::set<Name>
-  getCertificatesOfKey(const Name& identity, const name::Component& keyId) const NDN_CXX_DECL_OVERRIDE;
+  getCertificatesOfKey(const Name& identity, const name::Component& keyId) const override;
 
   virtual void
-  setDefaultCertificateOfKey(const Name& identity, const name::Component& keyId, const Name& certName) NDN_CXX_DECL_OVERRIDE;
+  setDefaultCertificateOfKey(const Name& identity, const name::Component& keyId, const Name& certName) override;
 
   virtual IdentityCertificate
-  getDefaultCertificateOfKey(const Name& identity, const name::Component& keyId) const NDN_CXX_DECL_OVERRIDE;
+  getDefaultCertificateOfKey(const Name& identity, const name::Component& keyId) const override;
 
 private: // Key management
 
diff --git a/src/security/pib-sqlite3.hpp b/src/security/pib-sqlite3.hpp
index c63fb37..7e867cd 100644
--- a/src/security/pib-sqlite3.hpp
+++ b/src/security/pib-sqlite3.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -61,77 +61,77 @@
 public: // TpmLocator management
 
   virtual void
-  setTpmLocator(const std::string& tpmLocator) NDN_CXX_DECL_FINAL;
+  setTpmLocator(const std::string& tpmLocator) final;
 
   virtual std::string
-  getTpmLocator() const NDN_CXX_DECL_FINAL;
+  getTpmLocator() const final;
 
 public: // Identity management
 
   virtual bool
-  hasIdentity(const Name& identity) const NDN_CXX_DECL_FINAL;
+  hasIdentity(const Name& identity) const final;
 
   virtual void
-  addIdentity(const Name& identity) NDN_CXX_DECL_FINAL;
+  addIdentity(const Name& identity) final;
 
   virtual void
-  removeIdentity(const Name& identity) NDN_CXX_DECL_FINAL;
+  removeIdentity(const Name& identity) final;
 
   virtual std::set<Name>
-  getIdentities() const NDN_CXX_DECL_FINAL;
+  getIdentities() const final;
 
   virtual void
-  setDefaultIdentity(const Name& identityName) NDN_CXX_DECL_FINAL;
+  setDefaultIdentity(const Name& identityName) final;
 
   virtual Name
-  getDefaultIdentity() const NDN_CXX_DECL_FINAL;
+  getDefaultIdentity() const final;
 
 public: // Key management
 
   virtual bool
-  hasKey(const Name& identity, const name::Component& keyId) const NDN_CXX_DECL_FINAL;
+  hasKey(const Name& identity, const name::Component& keyId) const final;
 
   virtual void
-  addKey(const Name& identity, const name::Component& keyId, const PublicKey& publicKey) NDN_CXX_DECL_FINAL;
+  addKey(const Name& identity, const name::Component& keyId, const PublicKey& publicKey) final;
 
   virtual void
-  removeKey(const Name& identity, const name::Component& keyId) NDN_CXX_DECL_FINAL;
+  removeKey(const Name& identity, const name::Component& keyId) final;
 
   virtual PublicKey
-  getKeyBits(const Name& identity, const name::Component& keyId) const NDN_CXX_DECL_FINAL;
+  getKeyBits(const Name& identity, const name::Component& keyId) const final;
 
   virtual std::set<name::Component>
-  getKeysOfIdentity(const Name& identity) const NDN_CXX_DECL_FINAL;
+  getKeysOfIdentity(const Name& identity) const final;
 
   virtual void
-  setDefaultKeyOfIdentity(const Name& identity, const name::Component& keyId) NDN_CXX_DECL_FINAL;
+  setDefaultKeyOfIdentity(const Name& identity, const name::Component& keyId) final;
 
   virtual name::Component
-  getDefaultKeyOfIdentity(const Name& identity) const NDN_CXX_DECL_FINAL;
+  getDefaultKeyOfIdentity(const Name& identity) const final;
 
 public: // Certificate Management
 
   virtual bool
-  hasCertificate(const Name& certName) const NDN_CXX_DECL_FINAL;
+  hasCertificate(const Name& certName) const final;
 
   virtual void
-  addCertificate(const IdentityCertificate& certificate) NDN_CXX_DECL_FINAL;
+  addCertificate(const IdentityCertificate& certificate) final;
 
   virtual void
-  removeCertificate(const Name& certName) NDN_CXX_DECL_FINAL;
+  removeCertificate(const Name& certName) final;
 
   virtual IdentityCertificate
-  getCertificate(const Name& certName) const NDN_CXX_DECL_FINAL;
+  getCertificate(const Name& certName) const final;
 
   virtual std::set<Name>
-  getCertificatesOfKey(const Name& identity, const name::Component& keyId) const NDN_CXX_DECL_FINAL;
+  getCertificatesOfKey(const Name& identity, const name::Component& keyId) const final;
 
   virtual void
   setDefaultCertificateOfKey(const Name& identity, const name::Component& keyId,
-                             const Name& certName) NDN_CXX_DECL_FINAL;
+                             const Name& certName) final;
 
   virtual IdentityCertificate
-  getDefaultCertificateOfKey(const Name& identity, const name::Component& keyId) const NDN_CXX_DECL_FINAL;
+  getDefaultCertificateOfKey(const Name& identity, const name::Component& keyId) const final;
 
 private:
   sqlite3* m_database;
diff --git a/tests/unit-tests/mgmt/dispatcher.t.cpp b/tests/unit-tests/mgmt/dispatcher.t.cpp
index 5458be0..42c3717 100644
--- a/tests/unit-tests/mgmt/dispatcher.t.cpp
+++ b/tests/unit-tests/mgmt/dispatcher.t.cpp
@@ -64,13 +64,13 @@
   }
 
   virtual Block
-  wireEncode() const NDN_CXX_DECL_FINAL
+  wireEncode() const final
   {
     return Block(128);
   }
 
   virtual void
-  wireDecode(const Block& wire) NDN_CXX_DECL_FINAL
+  wireDecode(const Block& wire) final
   {
     if (wire.type() != 128)
       throw tlv::Error("Expecting TLV type 128");
diff --git a/tools/ndnsec/util.hpp b/tools/ndnsec/util.hpp
index 9739dcc..253f170 100644
--- a/tools/ndnsec/util.hpp
+++ b/tools/ndnsec/util.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2013-2015 Regents of the University of California.
+ * Copyright (c) 2013-2016 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -139,34 +139,34 @@
   }
 
   virtual std::string
-  name() const NDN_CXX_DECL_FINAL
+  name() const final
   {
     return std::string();
   }
 
   // There are no tokens for an AccumulatorType
   virtual unsigned
-  min_tokens() const NDN_CXX_DECL_FINAL
+  min_tokens() const final
   {
     return 0;
   }
 
   virtual unsigned
-  max_tokens() const NDN_CXX_DECL_FINAL
+  max_tokens() const final
   {
     return 0;
   }
 
   // Accumulating from different sources is silly.
   virtual bool
-  is_composing() const NDN_CXX_DECL_FINAL
+  is_composing() const final
   {
     return false;
   }
 
   // Requiring one or more appearances is unlikely.
   virtual bool
-  is_required() const NDN_CXX_DECL_FINAL
+  is_required() const final
   {
     return false;
   }
@@ -180,7 +180,7 @@
   virtual void
   parse(boost::any& value_store,
         const std::vector<std::string>& new_tokens,
-        bool utf8) const NDN_CXX_DECL_FINAL
+        bool utf8) const final
   {
     if (value_store.empty())
       value_store = T();
@@ -191,7 +191,7 @@
    * @brief If the option doesn't appear, this is the default value.
    */
   virtual bool
-  apply_default(boost::any& value_store) const NDN_CXX_DECL_FINAL
+  apply_default(boost::any& value_store) const final
   {
     value_store = m_default;
     return true;
@@ -201,7 +201,7 @@
    * @brief Notify the user function with the value of the value store.
    */
   virtual void
-  notify(const boost::any& value_store) const NDN_CXX_DECL_FINAL
+  notify(const boost::any& value_store) const final
   {
     const T* val = boost::any_cast<T>(&value_store);
     if (m_store)
@@ -210,7 +210,7 @@
 
 #if BOOST_VERSION >= 105900
   virtual bool
-  adjacent_tokens_only() const NDN_CXX_DECL_FINAL
+  adjacent_tokens_only() const final
   {
     return false;
   }
