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 {}; +}