9#ifndef BOOST_CLBL_TRTS_DETAIL_FUNCTION_HPP
10#define BOOST_CLBL_TRTS_DETAIL_FUNCTION_HPP
18namespace boost {
namespace callable_traits {
namespace detail {
23#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
24#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
26#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
28#ifndef BOOST_CLBL_TRTS_DISABLE_ABOMINABLE_FUNCTIONS
30#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const
32#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
34#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS volatile
36#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
38#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const volatile
40#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
42#ifndef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS
44#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS &
46#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
48#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS &&
50#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
52#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const &
54#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
56#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const &&
58#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
60#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS volatile &
62#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
64#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS volatile &&
66#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
68#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const volatile &
70#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
72#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const volatile &&
74#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
81#define BOOST_CLBL_TRTS_CC_TAG dummy
82#define BOOST_CLBL_TRTS_VARARGS_CC BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
83#define BOOST_CLBL_TRTS_CC
84#define BOOST_CLBL_TRTS_ST
87#undef BOOST_CLBL_TRTS_ST
88#undef BOOST_CLBL_TRTS_CC
89#undef BOOST_CLBL_TRTS_CC_TAG
90#undef BOOST_CLBL_TRTS_VARARGS_CC
105#ifdef BOOST_CLBL_TRTS_ENABLE_STDCALL
106#define BOOST_CLBL_TRTS_CC_TAG stdcall_tag
107#define BOOST_CLBL_TRTS_VARARGS_CC BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
108#define BOOST_CLBL_TRTS_CC __stdcall
109#define BOOST_CLBL_TRTS_ST
111#undef BOOST_CLBL_TRTS_ST
112#undef BOOST_CLBL_TRTS_CC
113#undef BOOST_CLBL_TRTS_CC_TAG
114#undef BOOST_CLBL_TRTS_VARARGS_CC
117#ifdef BOOST_CLBL_TRTS_ENABLE_FASTCALL
118#define BOOST_CLBL_TRTS_CC_TAG fastcall_tag
119#define BOOST_CLBL_TRTS_VARARGS_CC BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
120#define BOOST_CLBL_TRTS_CC __fastcall
121#define BOOST_CLBL_TRTS_ST
123#undef BOOST_CLBL_TRTS_CC
124#undef BOOST_CLBL_TRTS_ST
125#undef BOOST_CLBL_TRTS_CC_TAG
126#undef BOOST_CLBL_TRTS_VARARGS_CC
129#ifdef BOOST_CLBL_TRTS_ENABLE_PASCAL
130#define BOOST_CLBL_TRTS_CC_TAG pascal_tag
131#define BOOST_CLBL_TRTS_VARARGS_CC BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
132#define BOOST_CLBL_TRTS_CC
133#define BOOST_CLBL_TRTS_ST pascal
135#undef BOOST_CLBL_TRTS_CC
136#undef BOOST_CLBL_TRTS_ST
137#undef BOOST_CLBL_TRTS_CC_TAG
138#undef BOOST_CLBL_TRTS_VARARGS_CC
142struct function<T&> : std::conditional<function<T>::value,
145 static constexpr const bool value = !std::is_pointer<T>::value;
163 template<
typename NewReturn>
168 template<
typename... NewArgs>
171 template<
typename... NewArgs>
174 template<std::
size_t Count>
177 template<std::
size_t Count>
180 template<std::size_t Index,
typename... NewArgs>
183 template<std::
size_t Index, std::
size_t Count>
186 template<std::size_t Index,
typename... NewArgs>
typename base::add_varargs & add_varargs
typename base::template push_front< NewArgs... > & push_front
typename base::template replace_args< Index, NewArgs... > & replace_args
typename base::template push_back< NewArgs... > & push_back
typename base::template pop_front< Count > & pop_front
typename base::template apply_return< NewReturn > & apply_return
typename base::remove_varargs & remove_varargs
typename base::template pop_back< Count > & pop_back
typename base::clear_args & clear_args
typename base::template remove_args< Index, Count > & remove_args
typename base::template insert_args< Index, NewArgs... > & insert_args