aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJordan Maples [MSFT] <49793787+JordanMaples@users.noreply.github.com>2020-08-12 15:49:55 -0700
committerGitHub <noreply@github.com>2020-08-12 15:49:55 -0700
commit0c80f51f7c5ae947411906ae5600d46d56e491bf (patch)
treed9e26f4ad39d1b5eec20e11340b99cdf06322a4c
parentef714fa49e43254ae9d448702e17a527e97d42e5 (diff)
parentafe824490ebae9188be0e96ecff3dbc73b37285c (diff)
downloadplatform_external_Microsoft-GSL-0c80f51f7c5ae947411906ae5600d46d56e491bf.tar.gz
platform_external_Microsoft-GSL-0c80f51f7c5ae947411906ae5600d46d56e491bf.tar.bz2
platform_external_Microsoft-GSL-0c80f51f7c5ae947411906ae5600d46d56e491bf.zip
Merge pull request #908 from JordanMaples/fix_nodiscard_in_finally_macro
Finally [[nodiscard]] - Version 2
-rw-r--r--include/gsl/gsl_util16
1 files changed, 11 insertions, 5 deletions
diff --git a/include/gsl/gsl_util b/include/gsl/gsl_util
index 89fb2ee..974655b 100644
--- a/include/gsl/gsl_util
+++ b/include/gsl/gsl_util
@@ -32,6 +32,12 @@
#endif // _MSC_VER
+#if defined(__cplusplus) && (__cplusplus >= 201703L)
+#define GSL_NODISCARD [[nodiscard]]
+#else
+#define GSL_NODISCARD
+#endif // defined(__cplusplus) && (__cplusplus >= 201703L)
+
namespace gsl
{
//
@@ -67,13 +73,13 @@ private:
// finally() - convenience function to generate a final_action
template <class F>
-final_action<F> finally(const F& f) noexcept
+GSL_NODISCARD final_action<F> finally(const F& f) noexcept
{
return final_action<F>(f);
}
template <class F>
-final_action<F> finally(F&& f) noexcept
+GSL_NODISCARD final_action<F> finally(F&& f) noexcept
{
return final_action<F>(std::forward<F>(f));
}
@@ -98,16 +104,16 @@ constexpr
T narrow(U u) noexcept(false)
{
constexpr const bool is_different_signedness = (std::is_signed<T>::value != std::is_signed<U>::value);
-
+
const T t = narrow_cast<T>(u);
-
+
if (static_cast<U>(t) != u
|| (is_different_signedness
&& ((t < T{}) != (u < U{}))))
{
throw narrowing_error{};
}
-
+
return t;
}