[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:
- Backporting [[nodiscard]] to entities declared as such by the standard in newer dialects, but not in the present one.
- 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
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
by defining _LIBCPP_DISABLE_NODISCARD_EXT.
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