Stratosphere: Add WrapIpcCommandImpl templating.
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
Copyright (c) 2016 Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
*/
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#define BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE std::false_type
|
||||
#include <boost/callable_traits/detail/unguarded/function_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#undef BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE
|
||||
|
||||
#ifdef BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE
|
||||
#define BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE std::true_type
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE transaction_safe
|
||||
#include <boost/callable_traits/detail/unguarded/function_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#undef BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE
|
||||
#endif // #ifdef BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
Copyright (c) 2016 Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
*/
|
||||
|
||||
#define BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#define BOOST_CLBL_TRTS_IS_NOEXCEPT std::false_type
|
||||
#include <boost/callable_traits/detail/unguarded/function_3.hpp>
|
||||
#undef BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#undef BOOST_CLBL_TRTS_IS_NOEXCEPT
|
||||
|
||||
#ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
|
||||
#define BOOST_CLBL_TRTS_NOEXCEPT_SPEC noexcept
|
||||
#define BOOST_CLBL_TRTS_IS_NOEXCEPT std::true_type
|
||||
#include <boost/callable_traits/detail/unguarded/function_3.hpp>
|
||||
#undef BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#undef BOOST_CLBL_TRTS_IS_NOEXCEPT
|
||||
#endif // #ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
|
||||
@@ -0,0 +1,260 @@
|
||||
/*
|
||||
Copyright (c) 2016 Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
|
||||
macros used:
|
||||
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS - the function-level qualifiers for the
|
||||
current inclusion (combinations of `const` `volatile` `&` `&&`, or nothing)
|
||||
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE - the transaction_safe specifier for
|
||||
the current include (`transaction_safe` or nothing)
|
||||
|
||||
BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE - `std::true_type` or `std::false_type`,
|
||||
tied on whether BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE is `transaction_safe`
|
||||
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER - `transaction_safe` when
|
||||
BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE is enabled, otherwise nothing
|
||||
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC - the noexcept specifier for
|
||||
the current include (`noexcept` or nothing)
|
||||
|
||||
BOOST_CLBL_TRTS_IS_NOEXCEPT - `std::true_type` or `std::false_type`,
|
||||
tied on whether BOOST_CLBL_TRTS_NOEXCEPT_SPEC is `noexcept`
|
||||
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER - `noexcept` if
|
||||
BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES is defined, otherwise nothing
|
||||
|
||||
*/
|
||||
|
||||
template<typename Return, typename... Args>
|
||||
struct function<Return(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC>
|
||||
: default_callable_traits<dummy BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS> {
|
||||
|
||||
static constexpr bool value = true;
|
||||
|
||||
using traits = function;
|
||||
|
||||
using return_type = Return;
|
||||
|
||||
using arg_types = std::tuple<Args...>;
|
||||
using non_invoke_arg_types = arg_types;
|
||||
|
||||
using type = Return(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using function_type = Return(Args...);
|
||||
|
||||
using qualified_function_type = Return(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using remove_varargs = type;
|
||||
|
||||
using add_varargs = Return (Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using is_noexcept = BOOST_CLBL_TRTS_IS_NOEXCEPT;
|
||||
|
||||
using remove_noexcept = Return(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE;
|
||||
|
||||
using add_noexcept = Return(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER;
|
||||
|
||||
using is_transaction_safe = BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE;
|
||||
|
||||
using remove_transaction_safe = Return(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using add_transaction_safe = Return(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using qualifiers = default_callable_traits<dummy BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>;
|
||||
|
||||
template<qualifier_flags Flags>
|
||||
using set_qualifiers = set_function_qualifiers<Flags, is_transaction_safe::value,
|
||||
is_noexcept::value, Return, Args...>;
|
||||
|
||||
#ifdef BOOST_CLBL_TRTS_DISABLE_ABOMINABLE_FUNCTIONS
|
||||
|
||||
using add_member_lvalue_reference = abominable_functions_not_supported_on_this_compiler;
|
||||
using add_member_rvalue_reference = abominable_functions_not_supported_on_this_compiler;
|
||||
using add_member_const = abominable_functions_not_supported_on_this_compiler;
|
||||
using add_member_volatile = abominable_functions_not_supported_on_this_compiler;
|
||||
using add_member_cv = abominable_functions_not_supported_on_this_compiler;
|
||||
|
||||
#else
|
||||
|
||||
using add_member_lvalue_reference = set_qualifiers<
|
||||
collapse_flags<qualifiers::q_flags, lref_>::value>;
|
||||
|
||||
using add_member_rvalue_reference = set_qualifiers<
|
||||
collapse_flags<qualifiers::q_flags, rref_>::value>;
|
||||
|
||||
using add_member_const = set_qualifiers<qualifiers::q_flags | const_>;
|
||||
|
||||
using add_member_volatile = set_qualifiers<qualifiers::q_flags | volatile_>;
|
||||
|
||||
using add_member_cv = set_qualifiers<qualifiers::q_flags | cv_>;
|
||||
|
||||
#endif // #ifdef BOOST_CLBL_TRTS_DISABLE_ABOMINABLE_FUNCTIONS
|
||||
|
||||
using remove_member_reference = set_qualifiers<qualifiers::cv_flags>;
|
||||
|
||||
using remove_member_const = set_qualifiers<
|
||||
qualifiers::ref_flags | remove_const_flag<qualifiers::cv_flags>::value>;
|
||||
|
||||
using remove_member_volatile = set_qualifiers<
|
||||
qualifiers::ref_flags | remove_volatile_flag<qualifiers::cv_flags>::value>;
|
||||
|
||||
using remove_member_cv = set_qualifiers<qualifiers::ref_flags>;
|
||||
|
||||
template<typename U>
|
||||
using apply_member_pointer = add_member_pointer<type, U>;
|
||||
|
||||
template<typename NewReturn>
|
||||
using apply_return = NewReturn(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
template<template<class...> class Container>
|
||||
using expand_args = Container<Args...>;
|
||||
|
||||
using is_member_pointer = std::false_type;
|
||||
};
|
||||
|
||||
|
||||
template<typename Return, typename... Args>
|
||||
struct function<Return (Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC>
|
||||
: default_callable_traits<dummy BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS> {
|
||||
|
||||
static constexpr bool value = true;
|
||||
|
||||
using has_varargs = std::true_type;
|
||||
using traits = function;
|
||||
using return_type = Return;
|
||||
using arg_types = std::tuple<Args...>;
|
||||
|
||||
using type = Return (Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using function_type = Return(Args..., ...);
|
||||
|
||||
using qualified_function_type = Return(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using remove_varargs = Return (Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using add_varargs = type;
|
||||
|
||||
using is_noexcept = BOOST_CLBL_TRTS_IS_NOEXCEPT;
|
||||
|
||||
using remove_noexcept = Return(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE;
|
||||
|
||||
using add_noexcept = Return(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER;
|
||||
|
||||
using is_transaction_safe = BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE;
|
||||
|
||||
using remove_transaction_safe = Return(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using add_transaction_safe = Return(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using qualifiers = default_callable_traits<dummy BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>;
|
||||
|
||||
template<qualifier_flags Flags>
|
||||
using set_qualifiers = set_varargs_function_qualifiers<Flags, is_transaction_safe::value,
|
||||
is_noexcept::value, Return, Args...>;
|
||||
|
||||
#ifdef BOOST_CLBL_TRTS_DISABLE_ABOMINABLE_FUNCTIONS
|
||||
|
||||
using add_member_lvalue_reference = abominable_functions_not_supported_on_this_compiler;
|
||||
using add_member_rvalue_reference = abominable_functions_not_supported_on_this_compiler;
|
||||
using add_member_const = abominable_functions_not_supported_on_this_compiler;
|
||||
using add_member_volatile = abominable_functions_not_supported_on_this_compiler;
|
||||
using add_member_cv = abominable_functions_not_supported_on_this_compiler;
|
||||
|
||||
#else
|
||||
|
||||
using add_member_lvalue_reference = set_qualifiers<
|
||||
collapse_flags<qualifiers::q_flags, lref_>::value>;
|
||||
|
||||
using add_member_rvalue_reference = set_qualifiers<
|
||||
collapse_flags<qualifiers::q_flags, rref_>::value>;
|
||||
|
||||
using add_member_const = set_qualifiers<qualifiers::q_flags | const_>;
|
||||
|
||||
using add_member_volatile = set_qualifiers<qualifiers::q_flags | volatile_>;
|
||||
|
||||
using add_member_cv = set_qualifiers<qualifiers::q_flags | cv_>;
|
||||
|
||||
#endif // #ifdef BOOST_CLBL_TRTS_DISABLE_ABOMINABLE_FUNCTIONS
|
||||
|
||||
using remove_member_reference = set_qualifiers<qualifiers::cv_flags>;
|
||||
|
||||
using remove_member_const = set_qualifiers<
|
||||
qualifiers::ref_flags | remove_const_flag<qualifiers::cv_flags>::value>;
|
||||
|
||||
using remove_member_volatile = set_qualifiers<
|
||||
qualifiers::ref_flags | remove_volatile_flag<qualifiers::cv_flags>::value>;
|
||||
|
||||
using remove_member_cv = set_qualifiers<qualifiers::ref_flags>;
|
||||
|
||||
template<typename U>
|
||||
using apply_member_pointer =
|
||||
Return( BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC U::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
template<typename NewReturn>
|
||||
using apply_return = NewReturn(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
template<template<class...> class Container>
|
||||
using expand_args = Container<Args...>;
|
||||
|
||||
using is_member_pointer = std::false_type;
|
||||
};
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
Copyright (c) 2016 Modified Work Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
*/
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#define BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE std::false_type
|
||||
#include <boost/callable_traits/detail/unguarded/function_ptr_2.hpp>
|
||||
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#undef BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE
|
||||
|
||||
#ifdef BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE
|
||||
#define BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE std::true_type
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE transaction_safe
|
||||
#include <boost/callable_traits/detail/unguarded/function_ptr_2.hpp>
|
||||
#endif
|
||||
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#undef BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
Copyright (c) 2016 Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
*/
|
||||
|
||||
#define BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#define BOOST_CLBL_TRTS_IS_NOEXCEPT std::false_type
|
||||
#include <boost/callable_traits/detail/unguarded/function_ptr_3.hpp>
|
||||
#undef BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#undef BOOST_CLBL_TRTS_IS_NOEXCEPT
|
||||
|
||||
#ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
|
||||
#define BOOST_CLBL_TRTS_NOEXCEPT_SPEC noexcept
|
||||
#define BOOST_CLBL_TRTS_IS_NOEXCEPT std::true_type
|
||||
#include <boost/callable_traits/detail/unguarded/function_ptr_3.hpp>
|
||||
#undef BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#undef BOOST_CLBL_TRTS_IS_NOEXCEPT
|
||||
#endif // #ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
|
||||
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
Copyright (c) 2016 Modified Work Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
|
||||
macros used:
|
||||
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE - the transaction_safe specifier for
|
||||
the current include (`transaction_safe` or nothing)
|
||||
|
||||
BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE - `std::true_type` or `std::false_type`,
|
||||
tied on whether BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE is `transaction_safe`
|
||||
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER - `transaction_safe` when
|
||||
BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE is enabled, otherwise nothing
|
||||
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC - the noexcept specifier for
|
||||
the current include (`noexcept` or nothing)
|
||||
|
||||
BOOST_CLBL_TRTS_IS_NOEXCEPT - `std::true_type` or `std::false_type`,
|
||||
tied on whether BOOST_CLBL_TRTS_NOEXCEPT_SPEC is `noexcept`
|
||||
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER - `noexcept` if
|
||||
BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES is defined, otherwise nothing
|
||||
*/
|
||||
|
||||
template<typename Return, typename... Args>
|
||||
struct function<
|
||||
BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_CC *)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC>
|
||||
: default_callable_traits<> {
|
||||
|
||||
static constexpr bool value = true;
|
||||
|
||||
using traits = function;
|
||||
|
||||
using return_type = Return;
|
||||
|
||||
using arg_types = std::tuple<Args...>;
|
||||
using non_invoke_arg_types = arg_types;
|
||||
|
||||
using type = BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_CC *)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE;
|
||||
|
||||
using function_type = Return(Args...);
|
||||
using qualified_function_type = function_type;
|
||||
using remove_varargs = type;
|
||||
|
||||
using add_varargs =
|
||||
BOOST_CLBL_TRTS_ST Return (BOOST_CLBL_TRTS_VARARGS_CC *)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using is_noexcept = BOOST_CLBL_TRTS_IS_NOEXCEPT;
|
||||
|
||||
using remove_noexcept = Return(BOOST_CLBL_TRTS_CC *)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE;
|
||||
|
||||
using add_noexcept = Return(BOOST_CLBL_TRTS_CC *)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER;
|
||||
|
||||
using is_transaction_safe = BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE;
|
||||
|
||||
using remove_transaction_safe = Return(BOOST_CLBL_TRTS_CC *)(Args...)
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using add_transaction_safe = Return(BOOST_CLBL_TRTS_CC *)(Args...)
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
template<typename U>
|
||||
using apply_member_pointer =
|
||||
BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_CC U::*)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
template<typename NewReturn>
|
||||
using apply_return =
|
||||
BOOST_CLBL_TRTS_ST NewReturn(BOOST_CLBL_TRTS_CC *)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
template<template<class...> class Container>
|
||||
using expand_args = Container<Args...>;
|
||||
|
||||
using is_member_pointer = std::false_type;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
Copyright (c) 2016 Modified Work Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
*/
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#define BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE std::false_type
|
||||
#include <boost/callable_traits/detail/unguarded/function_ptr_varargs_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#undef BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE
|
||||
|
||||
#ifdef BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE
|
||||
#define BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE std::true_type
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE transaction_safe
|
||||
#include <boost/callable_traits/detail/unguarded/function_ptr_varargs_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#undef BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE
|
||||
#endif // #ifdef BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
Copyright (c) 2016 Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
*/
|
||||
|
||||
#define BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#define BOOST_CLBL_TRTS_IS_NOEXCEPT std::false_type
|
||||
#include <boost/callable_traits/detail/unguarded/function_ptr_varargs_3.hpp>
|
||||
#undef BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#undef BOOST_CLBL_TRTS_IS_NOEXCEPT
|
||||
|
||||
#ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
|
||||
#define BOOST_CLBL_TRTS_NOEXCEPT_SPEC noexcept
|
||||
#define BOOST_CLBL_TRTS_IS_NOEXCEPT std::true_type
|
||||
#include <boost/callable_traits/detail/unguarded/function_ptr_varargs_3.hpp>
|
||||
#undef BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#undef BOOST_CLBL_TRTS_IS_NOEXCEPT
|
||||
#endif // #ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
|
||||
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
Copyright (c) 2016 Modified Work Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
|
||||
macros used:
|
||||
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE - the transaction_safe specifier for
|
||||
the current include (`transaction_safe` or nothing)
|
||||
|
||||
BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE - `std::true_type` or `std::false_type`,
|
||||
tied on whether BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE is `transaction_safe`
|
||||
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER - `transaction_safe` when
|
||||
BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE is enabled, otherwise nothing
|
||||
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC - the noexcept specifier for
|
||||
the current include (`noexcept` or nothing)
|
||||
|
||||
BOOST_CLBL_TRTS_IS_NOEXCEPT - `std::true_type` or `std::false_type`,
|
||||
tied on whether BOOST_CLBL_TRTS_NOEXCEPT_SPEC is `noexcept`
|
||||
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER - `noexcept` if
|
||||
BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES is defined, otherwise nothing
|
||||
*/
|
||||
|
||||
template<typename Return, typename... Args>
|
||||
struct function<BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_VARARGS_CC *)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC>
|
||||
: default_callable_traits<> {
|
||||
|
||||
static constexpr bool value = true;
|
||||
|
||||
using has_varargs = std::true_type;
|
||||
|
||||
using traits = function;
|
||||
|
||||
using return_type = Return;
|
||||
|
||||
using arg_types = std::tuple<Args...>;
|
||||
using non_invoke_arg_types = arg_types;
|
||||
|
||||
using type =
|
||||
BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_VARARGS_CC *)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using function_type = Return(Args..., ...);
|
||||
|
||||
using qualified_function_type = function_type;
|
||||
|
||||
using remove_varargs =
|
||||
BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_CC *)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE;
|
||||
|
||||
using add_varargs = type;
|
||||
|
||||
using is_noexcept = BOOST_CLBL_TRTS_IS_NOEXCEPT;
|
||||
|
||||
using remove_noexcept = BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_CC *)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE;
|
||||
|
||||
using add_noexcept = BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_CC *)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER;
|
||||
|
||||
using is_transaction_safe = BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE;
|
||||
|
||||
using remove_transaction_safe = Return(BOOST_CLBL_TRTS_VARARGS_CC *)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using add_transaction_safe = Return(BOOST_CLBL_TRTS_VARARGS_CC *)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
template<typename U>
|
||||
using apply_member_pointer =
|
||||
BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_VARARGS_CC U::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
template<typename NewReturn>
|
||||
using apply_return =
|
||||
BOOST_CLBL_TRTS_ST NewReturn(BOOST_CLBL_TRTS_VARARGS_CC *)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
template<template<class...> class Container>
|
||||
using expand_args = Container<Args...>;
|
||||
|
||||
using is_member_pointer = std::false_type;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
|
||||
Copyright (c) 2016 Modified Work Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
|
||||
*/
|
||||
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS \
|
||||
BOOST_CLBL_TRTS_ABOMINABLE_CONST
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS volatile
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS \
|
||||
BOOST_CLBL_TRTS_ABOMINABLE_VOLATILE
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const volatile
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS \
|
||||
BOOST_CLBL_TRTS_ABOMINABLE_CONST BOOST_CLBL_TRTS_ABOMINABLE_VOLATILE
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#ifndef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS &
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS &
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS &&
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS &&
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const &
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS const &
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS volatile &
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS volatile &
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const volatile &
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS const volatile &
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const &&
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS const &&
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS volatile &&
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS volatile &&
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const volatile &&
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS const volatile &&
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#endif // #ifndef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
Copyright (c) 2016 Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
|
||||
*/
|
||||
|
||||
template<typename Return, typename T, typename... Args>
|
||||
struct set_member_function_qualifiers_t<
|
||||
flag_map<int BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::value,
|
||||
false, // IsTransactionSafe
|
||||
false, // IsNoexcept
|
||||
BOOST_CLBL_TRTS_CC_TAG, T, Return, Args...> {
|
||||
|
||||
using type = Return(BOOST_CLBL_TRTS_CC T::*)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS;
|
||||
};
|
||||
|
||||
template<typename Return, typename T, typename... Args>
|
||||
struct set_member_function_qualifiers_t<
|
||||
flag_map<int BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::value,
|
||||
false,
|
||||
true,
|
||||
BOOST_CLBL_TRTS_CC_TAG, T, Return, Args...> {
|
||||
|
||||
using type = Return(BOOST_CLBL_TRTS_CC T::*)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER;
|
||||
};
|
||||
|
||||
template<typename Return, typename T, typename... Args>
|
||||
struct set_member_function_qualifiers_t<
|
||||
flag_map<int BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::value,
|
||||
true,
|
||||
false,
|
||||
BOOST_CLBL_TRTS_CC_TAG, T, Return, Args...> {
|
||||
|
||||
using type = Return(BOOST_CLBL_TRTS_CC T::*)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER;
|
||||
};
|
||||
|
||||
template<typename Return, typename T, typename... Args>
|
||||
struct set_member_function_qualifiers_t<
|
||||
flag_map<int BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::value,
|
||||
true,
|
||||
true,
|
||||
BOOST_CLBL_TRTS_CC_TAG, T, Return, Args...> {
|
||||
|
||||
using type = Return(BOOST_CLBL_TRTS_CC T::*)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER;
|
||||
};
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#define BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE std::false_type
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_3.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#undef BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE
|
||||
|
||||
#ifdef BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE
|
||||
|
||||
#define BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE std::true_type
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE transaction_safe
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_3.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#undef BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
Copyright (c) 2016 Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
*/
|
||||
|
||||
#define BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#define BOOST_CLBL_TRTS_IS_NOEXCEPT std::false_type
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_4.hpp>
|
||||
#undef BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#undef BOOST_CLBL_TRTS_IS_NOEXCEPT
|
||||
|
||||
#ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
|
||||
#define BOOST_CLBL_TRTS_NOEXCEPT_SPEC noexcept
|
||||
#define BOOST_CLBL_TRTS_IS_NOEXCEPT std::true_type
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_4.hpp>
|
||||
#undef BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#undef BOOST_CLBL_TRTS_IS_NOEXCEPT
|
||||
#endif // #ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
|
||||
@@ -0,0 +1,147 @@
|
||||
/*
|
||||
Copyright (c) 2016 Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS - the function-level qualifiers for the
|
||||
current inclusion (combinations of `const` `volatile` `&` `&&`, or nothing)
|
||||
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE - the transaction_safe specifier for
|
||||
the current include (`transaction_safe` or nothing)
|
||||
|
||||
BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE - `std::true_type` or `std::false_type`,
|
||||
tied on whether BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE is `transaction_safe`
|
||||
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER - `transaction_safe` when
|
||||
BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE is defined, otherwise nothing
|
||||
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC - the noexcept specifier for
|
||||
the current include (`noexcept` or nothing)
|
||||
|
||||
BOOST_CLBL_TRTS_IS_NOEXCEPT - `std::true_type` or `std::false_type`,
|
||||
tied on whether BOOST_CLBL_TRTS_NOEXCEPT_SPEC is `noexcept`
|
||||
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER - `noexcept` if
|
||||
BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES is defined, otherwise nothing
|
||||
*/
|
||||
|
||||
template<typename Return, typename T, typename... Args>
|
||||
struct pmf<Return(BOOST_CLBL_TRTS_CC T::*)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC>
|
||||
: default_callable_traits<dummy BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS> {
|
||||
|
||||
static constexpr bool value = true;
|
||||
|
||||
using traits = pmf;
|
||||
|
||||
using return_type = Return;
|
||||
|
||||
using type = Return(BOOST_CLBL_TRTS_CC T::*)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using invoke_type = typename std::conditional<
|
||||
std::is_rvalue_reference<T BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::value,
|
||||
T BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS,
|
||||
typename std::add_lvalue_reference<T BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::type
|
||||
>::type;
|
||||
|
||||
using arg_types = std::tuple<invoke_type, Args...>;
|
||||
using non_invoke_arg_types = std::tuple<Args...>;
|
||||
|
||||
using function_object_signature = Return(Args...);
|
||||
|
||||
using function_type = Return(invoke_type, Args...);
|
||||
|
||||
using qualified_function_type = Return(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using remove_varargs = type;
|
||||
|
||||
using add_varargs =
|
||||
Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using is_noexcept = BOOST_CLBL_TRTS_IS_NOEXCEPT;
|
||||
|
||||
using remove_noexcept = Return(BOOST_CLBL_TRTS_CC T::*)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE;
|
||||
|
||||
using add_noexcept = Return(BOOST_CLBL_TRTS_CC T::*)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER;
|
||||
|
||||
using is_transaction_safe = BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE;
|
||||
|
||||
using remove_transaction_safe = Return(BOOST_CLBL_TRTS_CC T::*)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using add_transaction_safe = Return(BOOST_CLBL_TRTS_CC T::*)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using class_type = T;
|
||||
|
||||
using qualifiers = default_callable_traits<dummy BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>;
|
||||
|
||||
template<qualifier_flags Flags>
|
||||
using set_qualifiers = set_member_function_qualifiers<
|
||||
Flags, is_transaction_safe::value, is_noexcept::value,
|
||||
BOOST_CLBL_TRTS_CC_TAG, T, Return, Args...>;
|
||||
|
||||
using remove_member_reference = set_qualifiers<qualifiers::cv_flags>;
|
||||
|
||||
using add_member_lvalue_reference = set_qualifiers<
|
||||
collapse_flags<qualifiers::q_flags, lref_>::value>;
|
||||
|
||||
using add_member_rvalue_reference = set_qualifiers<
|
||||
collapse_flags<qualifiers::q_flags, rref_>::value>;
|
||||
|
||||
using add_member_const = set_qualifiers<qualifiers::q_flags | const_>;
|
||||
|
||||
using add_member_volatile = set_qualifiers<qualifiers::q_flags | volatile_>;
|
||||
|
||||
using add_member_cv = set_qualifiers<qualifiers::q_flags | cv_>;
|
||||
|
||||
using remove_member_const = set_qualifiers<
|
||||
qualifiers::ref_flags | remove_const_flag<qualifiers::cv_flags>::value>;
|
||||
|
||||
using remove_member_volatile = set_qualifiers<
|
||||
qualifiers::ref_flags | remove_volatile_flag<qualifiers::cv_flags>::value>;
|
||||
|
||||
using remove_member_cv = set_qualifiers<qualifiers::ref_flags>;
|
||||
|
||||
template<typename U>
|
||||
using apply_member_pointer =
|
||||
Return(BOOST_CLBL_TRTS_CC U::*)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
template<typename NewReturn>
|
||||
using apply_return =
|
||||
NewReturn(BOOST_CLBL_TRTS_CC T::*)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
template<template<class...> class Container>
|
||||
using expand_args = Container<invoke_type, Args...>;
|
||||
|
||||
using is_member_pointer = std::true_type;
|
||||
};
|
||||
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
Copyright (c) 2016 Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
|
||||
*/
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS \
|
||||
BOOST_CLBL_TRTS_ABOMINABLE_CONST
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS volatile
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS \
|
||||
BOOST_CLBL_TRTS_ABOMINABLE_VOLATILE
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const volatile
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS \
|
||||
BOOST_CLBL_TRTS_ABOMINABLE_CONST BOOST_CLBL_TRTS_ABOMINABLE_VOLATILE
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#ifndef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS &
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS &
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS &&
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS &&
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const &
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS const &
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS volatile &
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS volatile &
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const volatile &
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS const volatile &
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const &&
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS const &&
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS volatile &&
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS volatile &&
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const volatile &&
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS const volatile &&
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_2.hpp>
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
|
||||
#endif // #ifndef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
Copyright (c) 2016 Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
|
||||
*/
|
||||
|
||||
template<typename T, typename Return, typename... Args>
|
||||
struct set_varargs_member_function_qualifiers_t <
|
||||
flag_map<int BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::value,
|
||||
false, // IsTransactionSafe
|
||||
false, // IsNoexcept
|
||||
BOOST_CLBL_TRTS_CC_TAG, T, Return, Args...> {
|
||||
|
||||
using type =
|
||||
Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS;
|
||||
};
|
||||
|
||||
template<typename T, typename Return, typename... Args>
|
||||
struct set_varargs_member_function_qualifiers_t <
|
||||
flag_map<int BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::value,
|
||||
false,
|
||||
true,
|
||||
BOOST_CLBL_TRTS_CC_TAG, T, Return, Args...> {
|
||||
|
||||
using type =
|
||||
Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER;
|
||||
};
|
||||
|
||||
template<typename T, typename Return, typename... Args>
|
||||
struct set_varargs_member_function_qualifiers_t <
|
||||
flag_map<int BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::value,
|
||||
true,
|
||||
false,
|
||||
BOOST_CLBL_TRTS_CC_TAG, T, Return, Args...> {
|
||||
|
||||
using type =
|
||||
Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER;
|
||||
};
|
||||
|
||||
template<typename T, typename Return, typename... Args>
|
||||
struct set_varargs_member_function_qualifiers_t <
|
||||
flag_map<int BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::value,
|
||||
true,
|
||||
true,
|
||||
BOOST_CLBL_TRTS_CC_TAG, T, Return, Args...> {
|
||||
|
||||
using type =
|
||||
Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER;
|
||||
};
|
||||
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#define BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE std::false_type
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_3.hpp>
|
||||
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#undef BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE
|
||||
|
||||
#ifdef BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE
|
||||
|
||||
#define BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE std::true_type
|
||||
#define BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE transaction_safe
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_3.hpp>
|
||||
#endif
|
||||
|
||||
#undef BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
#undef BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
Copyright (c) 2016 Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
*/
|
||||
|
||||
#define BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#define BOOST_CLBL_TRTS_IS_NOEXCEPT std::false_type
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_4.hpp>
|
||||
#undef BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#undef BOOST_CLBL_TRTS_IS_NOEXCEPT
|
||||
|
||||
#ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
|
||||
#define BOOST_CLBL_TRTS_NOEXCEPT_SPEC noexcept
|
||||
#define BOOST_CLBL_TRTS_IS_NOEXCEPT std::true_type
|
||||
#include <boost/callable_traits/detail/unguarded/pmf_varargs_4.hpp>
|
||||
#undef BOOST_CLBL_TRTS_NOEXCEPT_SPEC
|
||||
#undef BOOST_CLBL_TRTS_IS_NOEXCEPT
|
||||
#endif // #ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
|
||||
@@ -0,0 +1,149 @@
|
||||
/*
|
||||
Copyright (c) 2016 Barrett Adair
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
|
||||
|
||||
HEADER GUARDS INTENTIONALLY OMITTED
|
||||
DO NOT INCLUDE THIS HEADER DIRECTLY
|
||||
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS - the function-level qualifiers for the
|
||||
current inclusion (combinations of `const` `volatile` `&` `&&`, or nothing)
|
||||
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE - the transaction_safe specifier for
|
||||
the current include (`transaction_safe` or nothing)
|
||||
|
||||
BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE - `std::true_type` or `std::false_type`,
|
||||
tied on whether BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE is `transaction_safe`
|
||||
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER - `transaction_safe` when
|
||||
BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE is enabled, otherwise nothing
|
||||
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC - the noexcept specifier for
|
||||
the current include (`noexcept` or nothing)
|
||||
|
||||
BOOST_CLBL_TRTS_IS_NOEXCEPT - `std::true_type` or `std::false_type`,
|
||||
tied on whether BOOST_CLBL_TRTS_NOEXCEPT_SPEC is `noexcept`
|
||||
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER - `noexcept` if
|
||||
BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES is defined, otherwise nothing
|
||||
*/
|
||||
|
||||
template<typename Return, typename T, typename... Args>
|
||||
struct pmf<Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC>
|
||||
: default_callable_traits<dummy BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS> {
|
||||
|
||||
static constexpr bool value = true;
|
||||
|
||||
using has_varargs = std::true_type;
|
||||
|
||||
using traits = pmf;
|
||||
|
||||
using return_type = Return;
|
||||
|
||||
using type = Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using invoke_type = typename std::conditional<
|
||||
std::is_rvalue_reference<T BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::value,
|
||||
T BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS,
|
||||
typename std::add_lvalue_reference<T BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::type
|
||||
>::type;
|
||||
|
||||
using arg_types = std::tuple<invoke_type, Args...>;
|
||||
using non_invoke_arg_types = std::tuple<Args...>;
|
||||
|
||||
using function_object_signature = Return(Args..., ...);
|
||||
|
||||
using function_type = Return(invoke_type, Args..., ...);
|
||||
|
||||
using qualified_function_type = Return(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using remove_varargs =
|
||||
Return(BOOST_CLBL_TRTS_CC T::*)(Args...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using add_varargs = type;
|
||||
|
||||
using is_noexcept = BOOST_CLBL_TRTS_IS_NOEXCEPT;
|
||||
|
||||
using remove_noexcept = Return(BOOST_CLBL_TRTS_CC T::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE;
|
||||
|
||||
using add_noexcept = Return(BOOST_CLBL_TRTS_CC T::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER;
|
||||
|
||||
using is_transaction_safe = BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE;
|
||||
|
||||
using remove_transaction_safe = Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using add_transaction_safe = Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
using class_type = T;
|
||||
|
||||
using qualifiers = default_callable_traits<dummy BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>;
|
||||
|
||||
template<qualifier_flags Flags>
|
||||
using set_qualifiers = set_varargs_member_function_qualifiers<
|
||||
Flags, is_transaction_safe::value, is_noexcept::value,
|
||||
BOOST_CLBL_TRTS_CC_TAG, T, Return, Args...>;
|
||||
|
||||
using remove_member_reference = set_qualifiers<qualifiers::cv_flags>;
|
||||
|
||||
using add_member_lvalue_reference = set_qualifiers<
|
||||
collapse_flags<qualifiers::q_flags, lref_>::value>;
|
||||
|
||||
using add_member_rvalue_reference = set_qualifiers<
|
||||
collapse_flags<qualifiers::q_flags, rref_>::value>;
|
||||
|
||||
using add_member_const = set_qualifiers<qualifiers::q_flags | const_>;
|
||||
|
||||
using add_member_volatile = set_qualifiers<qualifiers::q_flags | volatile_>;
|
||||
|
||||
using add_member_cv = set_qualifiers<qualifiers::q_flags | cv_>;
|
||||
|
||||
using remove_member_const = set_qualifiers<
|
||||
qualifiers::ref_flags | remove_const_flag<qualifiers::cv_flags>::value>;
|
||||
|
||||
using remove_member_volatile = set_qualifiers<
|
||||
qualifiers::ref_flags | remove_volatile_flag<qualifiers::cv_flags>::value>;
|
||||
|
||||
using remove_member_cv = set_qualifiers<qualifiers::ref_flags>;
|
||||
|
||||
template<typename U>
|
||||
using apply_member_pointer =
|
||||
Return(BOOST_CLBL_TRTS_VARARGS_CC U::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
template<typename NewReturn>
|
||||
using apply_return =
|
||||
NewReturn(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
|
||||
BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
|
||||
BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
|
||||
BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
|
||||
|
||||
template<template<class...> class Container>
|
||||
using expand_args = Container<invoke_type, Args...>;
|
||||
|
||||
using is_member_pointer = std::true_type;
|
||||
};
|
||||
Reference in New Issue
Block a user