type/traits: add remove_noexcept
This commit is contained in:
parent
a307b5f777
commit
bb07f6573c
@ -129,22 +129,62 @@ using remove_restrict_t = typename remove_restrict<T>::type;
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
/// removes the noexcept type specifier from invokable types
|
/// removes the noexcept type specifier from invokable types
|
||||||
template <typename T>
|
namespace detail {
|
||||||
struct remove_noexcept
|
template <typename T>
|
||||||
{ using type = T; };
|
struct remove_noexcept
|
||||||
|
{ using type = T; };
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
template <typename ResultT, typename ...Args>
|
template <typename ResultT, typename ...Args>
|
||||||
struct remove_noexcept<ResultT(&)(Args...) noexcept> {
|
struct remove_noexcept<ResultT(&)(Args...) noexcept> {
|
||||||
using type = ResultT(&)(Args...);
|
using type = ResultT(&)(Args...);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
template <typename ResultT, typename ...Args>
|
||||||
|
struct remove_noexcept<ResultT(*const)(Args...) noexcept> {
|
||||||
|
using type = ResultT(*const)(Args...);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
template <typename ResultT, typename ...Args>
|
||||||
|
struct remove_noexcept<ResultT(*)(Args...) noexcept> {
|
||||||
|
using type = ResultT(*)(Args...);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
template <typename ClassT, typename ResultT, typename ...Args>
|
||||||
|
struct remove_noexcept<ResultT(ClassT::*)(Args...) noexcept> {
|
||||||
|
using type = ResultT(ClassT::*)(Args...);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
template <typename ClassT, typename ResultT, typename ...Args>
|
||||||
|
struct remove_noexcept<ResultT(ClassT::*)(Args...) const noexcept> {
|
||||||
|
using type = ResultT(ClassT::*)(Args...) const;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
template <typename ResultT, typename ...Args>
|
template <typename T>
|
||||||
struct remove_noexcept<ResultT(*)(Args...) noexcept> {
|
struct remove_noexcept : public detail::remove_noexcept<T> { };
|
||||||
using type = ResultT(*)(Args...);
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
template <typename T>
|
||||||
|
using remove_noexcept_t = typename remove_noexcept<T>::type;
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// removes any `const' qualifier from the supplied member function
|
||||||
|
template <typename FuncT>
|
||||||
|
struct remove_member_const {
|
||||||
|
using type = FuncT;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user