Authored by lebedev.ri on Sep 22 2018, 10:54 AM.


[libc++] Add _LIBCPP_ENABLE_NODISCARD and _LIBCPP_NODISCARD_EXT to allow pre-C++2a [[nodiscard]]

The [[nodiscard]] attribute is intended to help users find bugs where
function return values are ignored when they shouldn't be. After C++17 the
C++ standard has started to declared such library functions as [[nodiscard]].
However, this application is limited and applies only to dialects after C++17.
Users who want help diagnosing misuses of STL functions may desire a more
liberal application of [[nodiscard]].

For this reason libc++ provides an extension that does just that! The
extension must be enabled by defining _LIBCPP_ENABLE_NODISCARD. The extended
applications of [[nodiscard]] takes two forms:

  1. Backporting [[nodiscard]] to entities declared as such by the standard in newer dialects, but not in the present one.
  1. Extended applications of [[nodiscard]], at the libraries discretion, applied to entities never declared as such by the standard.

Users may also opt-out of additional applications [[nodiscard]] using
additional macros.

Applications of the first form, which backport [[nodiscard]] from a newer
dialect may be disabled using macros specific to the dialect it was added. For

Applications of the second form, which are pure extensions, may be disabled

This patch was originally written by me (Roman Lebedev),
then but then reworked by Eric Fiselier.

Reviewers: mclow.lists, thakis, EricWF

Reviewed By: thakis, EricWF

Subscribers: llvm-commits, mclow.lists, lebedev.ri, EricWF, rjmccall, Quuxplusone, cfe-commits, christof

Differential Revision: https://reviews.llvm.org/D45179

llvm-svn: 342808