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
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
example _LIBCPP_DISABLE_NODISCARD_AFTER_CXX17.
Applications of the second form, which are pure extensions, may be disabled
by defining _LIBCPP_DISABLE_NODISCARD_EXT.
This patch was originally by Roman Lebedev.
[[nodiscard]] is a C++17 feature. This test should be >=, not >.