pmf_varargs_4.hpp
Go to the documentation of this file.
1 /*
2 Copyright (c) 2016 Barrett Adair
3 
4 Distributed under the Boost Software License, Version 1.0.
5 (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
6 
7 HEADER GUARDS INTENTIONALLY OMITTED
8 DO NOT INCLUDE THIS HEADER DIRECTLY
9 
10 BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS - the function-level qualifiers for the
11  current inclusion (combinations of `const` `volatile` `&` `&&`, or nothing)
12 
13 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE - the transaction_safe specifier for
14  the current include (`transaction_safe` or nothing)
15 
16 BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE - `std::true_type` or `std::false_type`,
17  tied on whether BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE is `transaction_safe`
18 
19 BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER - `transaction_safe` when
20  BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE is enabled, otherwise nothing
21 
22 BOOST_CLBL_TRTS_NOEXCEPT_SPEC - the noexcept specifier for
23  the current include (`noexcept` or nothing)
24 
25 BOOST_CLBL_TRTS_IS_NOEXCEPT - `std::true_type` or `std::false_type`,
26  tied on whether BOOST_CLBL_TRTS_NOEXCEPT_SPEC is `noexcept`
27 
28 BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER - `noexcept` if
29  BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES is defined, otherwise nothing
30 */
31 
32 template<typename Return, typename T, typename... Args>
33 struct pmf<Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
37  : default_callable_traits<dummy BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS> {
38 
39  static constexpr bool value = true;
40 
41  using has_varargs = std::true_type;
42 
43  using traits = pmf;
44 
45  using return_type = Return;
46 
47  using type = Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
51 
52  using invoke_type = typename std::conditional<
53  std::is_rvalue_reference<T BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::value,
55  typename std::add_lvalue_reference<T BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::type
56  >::type;
57 
58  using arg_types = std::tuple<invoke_type, Args...>;
59  using non_invoke_arg_types = std::tuple<Args...>;
60 
61  using function_object_signature = Return(Args..., ...);
62 
63  using function_type = Return(invoke_type, Args..., ...);
64 
65  using qualified_function_type = Return(Args..., ...)
69 
71  Return(BOOST_CLBL_TRTS_CC T::*)(Args...)
75 
76  using add_varargs = type;
77 
79 
80  using remove_noexcept = Return(BOOST_CLBL_TRTS_CC T::*)(Args..., ...)
83 
84  using add_noexcept = Return(BOOST_CLBL_TRTS_CC T::*)(Args..., ...)
88 
90 
91  using remove_transaction_safe = Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
94 
95  using add_transaction_safe = Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
99 
100  using class_type = T;
101 
102  using qualifiers = default_callable_traits<dummy BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>;
103 
104  template<qualifier_flags Flags>
106  Flags, is_transaction_safe::value, is_noexcept::value,
107  BOOST_CLBL_TRTS_CC_TAG, T, Return, Args...>;
108 
110 
112  collapse_flags<qualifiers::q_flags, lref_>::value>;
113 
115  collapse_flags<qualifiers::q_flags, rref_>::value>;
116 
118 
120 
122 
124  qualifiers::ref_flags | remove_const_flag<qualifiers::cv_flags>::value>;
125 
127  qualifiers::ref_flags | remove_volatile_flag<qualifiers::cv_flags>::value>;
128 
130 
131  template<typename U>
133  Return(BOOST_CLBL_TRTS_VARARGS_CC U::*)(Args..., ...)
137 
138  template<typename NewReturn>
139  using apply_return =
140  NewReturn(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
144 
145  template<template<class...> class Container>
146  using expand_args = Container<invoke_type, Args...>;
147 
148  using is_member_pointer = std::true_type;
149 };
#define BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER
Definition: config.hpp:37
#define BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER
Definition: config.hpp:106
#define BOOST_CLBL_TRTS_CC_TAG
Definition: function.hpp:81
#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
Definition: function.hpp:72
#define BOOST_CLBL_TRTS_CC
Definition: function.hpp:83
#define BOOST_CLBL_TRTS_VARARGS_CC
Definition: function.hpp:82
#define BOOST_CLBL_TRTS_IS_NOEXCEPT
Definition: function_2.hpp:12
#define BOOST_CLBL_TRTS_NOEXCEPT_SPEC
Definition: function_2.hpp:11
constexpr qualifier_flags volatile_
constexpr qualifier_flags rref_
constexpr qualifier_flags const_
constexpr qualifier_flags cv_
std::integral_constant< qualifier_flags, Flags &~const_ > remove_const_flag
constexpr qualifier_flags lref_
std::integral_constant< qualifier_flags, !AlreadyHasRef ?(Existing|Other) :(AlreadyHasLRef ?(Existing|(Other &~rref_)) :(IsAddingLRef ?((Existing &~rref_)|Other) :(Existing|Other)))> collapse_flags
typename set_varargs_member_function_qualifiers_t< Flags, IsTransactionSafe, IsNoexcept, Ts... >::type set_varargs_member_function_qualifiers
Definition: pmf.hpp:40
std::integral_constant< qualifier_flags, Flags &~volatile_ > remove_volatile_flag
NewReturn(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args...,...) BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE BOOST_CLBL_TRTS_NOEXCEPT_SPEC apply_return
Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args...,...) BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS BOOST_CLBL_TRTS_NOEXCEPT_SPEC remove_transaction_safe
set_varargs_member_function_qualifiers< Flags, is_transaction_safe::value, is_noexcept::value, BOOST_CLBL_TRTS_CC_TAG, T, Return, Args... > set_qualifiers
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 invoke_type
Return(BOOST_CLBL_TRTS_VARARGS_CC U::*)(Args...,...) BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE BOOST_CLBL_TRTS_NOEXCEPT_SPEC apply_member_pointer
Return(BOOST_CLBL_TRTS_CC T::*)(Args...,...) BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER add_noexcept
Return(BOOST_CLBL_TRTS_CC T::*)(Args...) BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE BOOST_CLBL_TRTS_NOEXCEPT_SPEC remove_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 type
Return(BOOST_CLBL_TRTS_CC T::*)(Args...,...) BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE remove_noexcept
Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args...,...) BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER BOOST_CLBL_TRTS_NOEXCEPT_SPEC add_transaction_safe
Return(Args...,...) BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE BOOST_CLBL_TRTS_NOEXCEPT_SPEC qualified_function_type
#define BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
Definition: function.hpp:11
#define BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE
Definition: function.hpp:12
#define BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
Definition: pmf.hpp:89