diff --git a/ndn-cxx/delegation-list.hpp b/ndn-cxx/delegation-list.hpp
index b60b096..0570426 100644
--- a/ndn-cxx/delegation-list.hpp
+++ b/ndn-cxx/delegation-list.hpp
@@ -98,7 +98,7 @@
     return m_dels.end();
   }
 
-  bool
+  NDN_CXX_NODISCARD bool
   empty() const noexcept
   {
     return m_dels.empty();
diff --git a/ndn-cxx/encoding/block.hpp b/ndn-cxx/encoding/block.hpp
index 0cd6867..51f9f4d 100644
--- a/ndn-cxx/encoding/block.hpp
+++ b/ndn-cxx/encoding/block.hpp
@@ -165,7 +165,7 @@
    *  @note This function does not throw upon decoding failure.
    *  @return `true` and the parsed Block if parsing succeeds; otherwise `false` and an invalid Block
    */
-  static std::tuple<bool, Block>
+  NDN_CXX_NODISCARD static std::tuple<bool, Block>
   fromBuffer(ConstBufferPtr buffer, size_t offset);
 
   /** @brief Try to parse Block from a raw buffer
@@ -175,7 +175,7 @@
    *  @note This overload copies the TLV element octets into an internal wire buffer.
    *  @return `true` and the parsed Block if parsing succeeds; otherwise `false` and an invalid Block
    */
-  static std::tuple<bool, Block>
+  NDN_CXX_NODISCARD static std::tuple<bool, Block>
   fromBuffer(const uint8_t* buf, size_t bufSize);
 
 public: // wire format
@@ -197,7 +197,7 @@
    *  @warning Note that an empty Block is *not* the same as a valid but zero-length Block.
    *  @deprecated Use Block::isValid()
    */
-  bool
+  NDN_CXX_NODISCARD bool
   empty() const noexcept
   {
     return !isValid();
diff --git a/ndn-cxx/encoding/tlv.hpp b/ndn-cxx/encoding/tlv.hpp
index 5706e52..a3b6979 100644
--- a/ndn-cxx/encoding/tlv.hpp
+++ b/ndn-cxx/encoding/tlv.hpp
@@ -188,7 +188,7 @@
  * @return true if number was successfully read from input, false otherwise
  */
 template<typename Iterator>
-bool
+NDN_CXX_NODISCARD bool
 readVarNumber(Iterator& begin, Iterator end, uint64_t& number) noexcept;
 
 /**
@@ -205,7 +205,7 @@
  *       the TLV-TYPE is zero or larger than 2^32-1 (maximum allowed by the packet format).
  */
 template<typename Iterator>
-bool
+NDN_CXX_NODISCARD bool
 readType(Iterator& begin, Iterator end, uint32_t& type) noexcept;
 
 /**
diff --git a/ndn-cxx/impl/record-container.hpp b/ndn-cxx/impl/record-container.hpp
index d488393..94b2f5e 100644
--- a/ndn-cxx/impl/record-container.hpp
+++ b/ndn-cxx/impl/record-container.hpp
@@ -172,7 +172,7 @@
     });
   }
 
-  bool
+  NDN_CXX_NODISCARD bool
   empty() const noexcept
   {
     return m_container.empty();
diff --git a/ndn-cxx/interest-filter.hpp b/ndn-cxx/interest-filter.hpp
index 38f9b6b..74b7229 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-2018 Regents of the University of California.
+ * Copyright (c) 2013-2019 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -123,7 +123,7 @@
 
   /** \brief Get whether Interest loopback is allowed
    */
-  bool
+  NDN_CXX_NODISCARD bool
   allowsLoopback() const
   {
     return m_allowsLoopback;
diff --git a/ndn-cxx/interest.hpp b/ndn-cxx/interest.hpp
index 432f68c..a127dae 100644
--- a/ndn-cxx/interest.hpp
+++ b/ndn-cxx/interest.hpp
@@ -517,7 +517,7 @@
   void
   setApplicationParametersInternal(Block parameters);
 
-  shared_ptr<Buffer>
+  NDN_CXX_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 417c21d..df12134 100644
--- a/ndn-cxx/key-locator.hpp
+++ b/ndn-cxx/key-locator.hpp
@@ -83,7 +83,7 @@
   wireDecode(const Block& wire);
 
 public: // attributes
-  bool
+  NDN_CXX_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 624a0a5..d3a9766 100644
--- a/ndn-cxx/lp/packet.hpp
+++ b/ndn-cxx/lp/packet.hpp
@@ -58,7 +58,7 @@
    * \retval true packet has no field
    * \retval false packet has one or more fields
    */
-  bool
+  NDN_CXX_NODISCARD bool
   empty() const
   {
     return m_wire.elements_size() == 0;
@@ -70,7 +70,7 @@
    * \details This is equivalent to count() > 0
    */
   template<typename FIELD>
-  bool
+  NDN_CXX_NODISCARD bool
   has() const
   {
     return count<FIELD>() > 0;
@@ -80,7 +80,7 @@
    * \return number of occurrences of FIELD
    */
   template<typename FIELD>
-  size_t
+  NDN_CXX_NODISCARD size_t
   count() const
   {
     return std::count_if(m_wire.elements_begin(), m_wire.elements_end(),
@@ -112,7 +112,7 @@
    * \return values of all occurrences of FIELD
    */
   template<typename FIELD>
-  std::vector<typename FIELD::ValueType>
+  NDN_CXX_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 3639b8e..0403d3e 100644
--- a/ndn-cxx/metadata-object.hpp
+++ b/ndn-cxx/metadata-object.hpp
@@ -76,7 +76,7 @@
    *
    * @throw tlv::Error @p discoveryInterestName is not valid
    */
-  Data
+  NDN_CXX_NODISCARD Data
   makeData(Name discoveryInterestName,
            KeyChain& keyChain,
            const ndn::security::SigningInfo& si = KeyChain::getDefaultSigningInfo(),
@@ -114,7 +114,7 @@
    *
    * @param name prefix of data collection
    */
-  static Interest
+  NDN_CXX_NODISCARD static Interest
   makeDiscoveryInterest(Name name);
 
 private:
diff --git a/ndn-cxx/name-component.hpp b/ndn-cxx/name-component.hpp
index ef06d20..fbea9ac 100644
--- a/ndn-cxx/name-component.hpp
+++ b/ndn-cxx/name-component.hpp
@@ -530,7 +530,7 @@
   fromParametersSha256Digest(const uint8_t* digest, size_t digestSize);
 
 public: // comparison
-  bool
+  NDN_CXX_NODISCARD bool
   empty() const
   {
     return value_size() == 0;
diff --git a/ndn-cxx/name.hpp b/ndn-cxx/name.hpp
index 27859fb..18b1fc3 100644
--- a/ndn-cxx/name.hpp
+++ b/ndn-cxx/name.hpp
@@ -135,7 +135,7 @@
 public: // access
   /** @brief Checks if the name is empty, i.e. has no components.
    */
-  bool
+  NDN_CXX_NODISCARD bool
   empty() const
   {
     return m_wire.elements().empty();
diff --git a/ndn-cxx/net/face-uri.hpp b/ndn-cxx/net/face-uri.hpp
index 1a6f6f6..aeb12c0 100644
--- a/ndn-cxx/net/face-uri.hpp
+++ b/ndn-cxx/net/face-uri.hpp
@@ -66,7 +66,7 @@
   FaceUri(const char* uri);
 
   /// exception-safe parsing
-  bool
+  NDN_CXX_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 a28bee2..84ef90c 100644
--- a/ndn-cxx/net/network-monitor.hpp
+++ b/ndn-cxx/net/network-monitor.hpp
@@ -92,7 +92,7 @@
    * @warning May return incomplete results if called before the
    *          #onEnumerationCompleted signal has been emitted.
    */
-  std::vector<shared_ptr<const NetworkInterface>>
+  NDN_CXX_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 6c7668b..679a694 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-2018 Regents of the University of California.
+ * Copyright (c) 2013-2019 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -29,10 +29,10 @@
 namespace security {
 namespace detail {
 
-const EVP_MD*
+NDN_CXX_NODISCARD const EVP_MD*
 digestAlgorithmToEvpMd(DigestAlgorithm algo);
 
-int
+NDN_CXX_NODISCARD int
 getEvpPkeyType(EVP_PKEY* key);
 
 class EvpMdCtx : noncopyable
@@ -90,10 +90,10 @@
     return m_bio;
   }
 
-  bool
+  NDN_CXX_NODISCARD bool
   read(uint8_t* buf, size_t buflen) const noexcept;
 
-  bool
+  NDN_CXX_NODISCARD bool
   write(const uint8_t* buf, size_t buflen) noexcept;
 
 private:
diff --git a/ndn-cxx/security/tpm/back-end.hpp b/ndn-cxx/security/tpm/back-end.hpp
index ab570f2..069bfe1 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-2018 Regents of the University of California.
+ * Copyright (c) 2013-2019 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -157,7 +157,7 @@
    *
    * @return True if the TPM was unlocked.
    */
-  virtual bool
+  NDN_CXX_NODISCARD virtual bool
   unlockTpm(const char* pw, size_t pwLen) const;
 
 protected: // static helper methods
diff --git a/ndn-cxx/security/tpm/tpm.hpp b/ndn-cxx/security/tpm/tpm.hpp
index 419eae4..5fc6636 100644
--- a/ndn-cxx/security/tpm/tpm.hpp
+++ b/ndn-cxx/security/tpm/tpm.hpp
@@ -147,7 +147,7 @@
    * @param password The password to unlock the TPM.
    * @param passwordLength The password size.
    */
-  bool
+  NDN_CXX_NODISCARD bool
   unlockTpm(const char* password, size_t passwordLength) const;
 
 NDN_CXX_PUBLIC_WITH_TESTS_ELSE_PRIVATE:
diff --git a/ndn-cxx/security/transform/private-key.cpp b/ndn-cxx/security/transform/private-key.cpp
index 8ac39d4..570c18c 100644
--- a/ndn-cxx/security/transform/private-key.cpp
+++ b/ndn-cxx/security/transform/private-key.cpp
@@ -360,7 +360,8 @@
     NDN_THROW(Error("Cannot convert key to PKCS #1 format"));
 
   auto buffer = make_shared<Buffer>(BIO_pending(membio));
-  membio.read(buffer->data(), buffer->size());
+  if (!membio.read(buffer->data(), buffer->size()))
+    NDN_THROW(Error("Read error during PKCS #1 conversion"));
 
   return buffer;
 }
@@ -378,7 +379,8 @@
     NDN_THROW(Error("Cannot convert key to PKCS #8 format"));
 
   auto buffer = make_shared<Buffer>(BIO_pending(membio));
-  membio.read(buffer->data(), buffer->size());
+  if (!membio.read(buffer->data(), buffer->size()))
+    NDN_THROW(Error("Read error during PKCS #8 conversion"));
 
   return buffer;
 }
@@ -395,7 +397,8 @@
     NDN_THROW(Error("Cannot convert key to PKCS #8 format"));
 
   auto buffer = make_shared<Buffer>(BIO_pending(membio));
-  membio.read(buffer->data(), buffer->size());
+  if (!membio.read(buffer->data(), buffer->size()))
+    NDN_THROW(Error("Read error during PKCS #8 conversion"));
 
   return buffer;
 }
diff --git a/ndn-cxx/util/backports.hpp b/ndn-cxx/util/backports.hpp
index e87f0e0..22a484e 100644
--- a/ndn-cxx/util/backports.hpp
+++ b/ndn-cxx/util/backports.hpp
@@ -56,6 +56,18 @@
 #  define NDN_CXX_FALLTHROUGH ((void)0)
 #endif
 
+//
+// http://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 NDEBUG
 #  define NDN_CXX_UNREACHABLE BOOST_ASSERT(false)
 #elif BOOST_COMP_GNUC || BOOST_COMP_CLANG
diff --git a/ndn-cxx/util/scheduler.cpp b/ndn-cxx/util/scheduler.cpp
index e2e58bf..9cbe734 100644
--- a/ndn-cxx/util/scheduler.cpp
+++ b/ndn-cxx/util/scheduler.cpp
@@ -38,7 +38,7 @@
   {
   }
 
-  time::nanoseconds
+  NDN_CXX_NODISCARD time::nanoseconds
   expiresFromNow() const
   {
     return std::max(expireTime - time::steady_clock::now(), 0_ns);
diff --git a/ndn-cxx/util/string-helper.hpp b/ndn-cxx/util/string-helper.hpp
index 57c27fb..97973da 100644
--- a/ndn-cxx/util/string-helper.hpp
+++ b/ndn-cxx/util/string-helper.hpp
@@ -125,7 +125,7 @@
  *
  * The output string is a continuous sequence of hex characters without any whitespace separators.
  */
-std::string
+NDN_CXX_NODISCARD std::string
 toHex(const uint8_t* buffer, size_t length, bool wantUpperCase = true);
 
 /**
@@ -134,7 +134,7 @@
  * @param buffer Buffer of bytes to convert to hexadecimal format
  * @param wantUpperCase if true (the default) use uppercase hex chars
  */
-std::string
+NDN_CXX_NODISCARD std::string
 toHex(const Buffer& buffer, bool wantUpperCase = true);
 
 /**
@@ -149,7 +149,7 @@
 /**
  * @brief Convert (the least significant nibble of) @p n to the corresponding hex character
  */
-constexpr char
+NDN_CXX_NODISCARD constexpr char
 toHexChar(unsigned int n, bool wantUpperCase = true) noexcept
 {
   return wantUpperCase ?
@@ -160,7 +160,7 @@
 /**
  * @brief Convert the hex character @p c to an integer in [0, 15], or -1 if it's not a hex character
  */
-constexpr int
+NDN_CXX_NODISCARD constexpr int
 fromHexChar(char c) noexcept
 {
   return (c >= '0' && c <= '9') ? int(c - '0') :
@@ -185,7 +185,7 @@
  * escape("100%") == "100%25"
  * @endcode
  */
-std::string
+NDN_CXX_NODISCARD std::string
 escape(const std::string& str);
 
 void
@@ -204,7 +204,7 @@
  * unescape("hello%20world%FooBar") == "hello world%FooBar"
  * @endcode
  */
-std::string
+NDN_CXX_NODISCARD std::string
 unescape(const std::string& str);
 
 void
