ttg 1.0.0
Template Task Graph (TTG): flowgraph-based programming model for high-performance distributed-memory algorithms
Loading...
Searching...
No Matches
pmf_varargs_4.hpp
Go to the documentation of this file.
1/*
2Copyright (c) 2016 Barrett Adair
3
4Distributed 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
7HEADER GUARDS INTENTIONALLY OMITTED
8DO NOT INCLUDE THIS HEADER DIRECTLY
9
10BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS - the function-level qualifiers for the
11 current inclusion (combinations of `const` `volatile` `&` `&&`, or nothing)
12
13BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE - the transaction_safe specifier for
14 the current include (`transaction_safe` or nothing)
15
16BOOST_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
19BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER - `transaction_safe` when
20 BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE is enabled, otherwise nothing
21
22BOOST_CLBL_TRTS_NOEXCEPT_SPEC - the noexcept specifier for
23 the current include (`noexcept` or nothing)
24
25BOOST_CLBL_TRTS_IS_NOEXCEPT - `std::true_type` or `std::false_type`,
26 tied on whether BOOST_CLBL_TRTS_NOEXCEPT_SPEC is `noexcept`
27
28BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER - `noexcept` if
29 BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES is defined, otherwise nothing
30*/
31
32template<typename Return, typename T, typename... Args>
33struct 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
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>
105 using set_qualifiers = set_varargs_member_function_qualifiers<
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
117 using add_member_const = set_qualifiers<qualifiers::q_flags | const_>;
118
119 using add_member_volatile = set_qualifiers<qualifiers::q_flags | volatile_>;
120
121 using add_member_cv = set_qualifiers<qualifiers::q_flags | cv_>;
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>
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:24
#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
#define BOOST_CLBL_TRTS_NOEXCEPT_SPEC
STL namespace.
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:18