From 63d77c239262dc64b119f79b0da89c3add1f2eda Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Mon, 7 May 2018 18:36:27 -0700 Subject: [PATCH] ircd::util: Split what(); use default param of std::current_exception(). --- include/ircd/util/util.h | 21 +-------------------- include/ircd/util/what.h | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 20 deletions(-) create mode 100644 include/ircd/util/what.h diff --git a/include/ircd/util/util.h b/include/ircd/util/util.h index be24a2c7f..cead68895 100644 --- a/include/ircd/util/util.h +++ b/include/ircd/util/util.h @@ -48,6 +48,7 @@ namespace ircd #include "pointers.h" #include "iterator.h" #include "nothrow.h" +#include "what.h" // Unsorted section namespace ircd { @@ -220,25 +221,5 @@ is_powerof2(const long long v) return v && !(v & (v - 1LL)); } -/// Get what() from exception_ptr -/// -inline ircd::string_view -what(const std::exception_ptr &eptr) -try -{ - if(likely(eptr)) - std::rethrow_exception(eptr); - - return {}; -} -catch(const std::exception &e) -{ - return e.what(); -} -catch(...) -{ - return {}; -} - } // namespace util } // namespace ircd diff --git a/include/ircd/util/what.h b/include/ircd/util/what.h new file mode 100644 index 000000000..5d9d0e898 --- /dev/null +++ b/include/ircd/util/what.h @@ -0,0 +1,37 @@ +// Matrix Construct +// +// Copyright (C) Matrix Construct Developers, Authors & Contributors +// Copyright (C) 2016-2018 Jason Volk +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice is present in all copies. The +// full license for this software is available in the LICENSE file. + +#pragma once +#define HAVE_IRCD_UTIL_WHAT_H + +namespace ircd::util +{ + string_view what(const std::exception_ptr eptr = std::current_exception()) noexcept; +} + +/// Get what() from exception_ptr +/// +inline ircd::string_view +ircd::util::what(const std::exception_ptr eptr) +noexcept try +{ + if(likely(eptr)) + std::rethrow_exception(eptr); + + return {}; +} +catch(const std::exception &e) +{ + return e.what(); +} +catch(...) +{ + return {}; +}