summaryrefslogtreecommitdiff
path: root/boost/callable_traits/detail/function.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/callable_traits/detail/function.hpp')
-rw-r--r--boost/callable_traits/detail/function.hpp192
1 files changed, 192 insertions, 0 deletions
diff --git a/boost/callable_traits/detail/function.hpp b/boost/callable_traits/detail/function.hpp
new file mode 100644
index 0000000000..624c704d20
--- /dev/null
+++ b/boost/callable_traits/detail/function.hpp
@@ -0,0 +1,192 @@
+/*
+
+@Copyright Barrett Adair 2015-2017
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+*/
+
+#ifndef BOOST_CLBL_TRTS_DETAIL_FUNCTION_HPP
+#define BOOST_CLBL_TRTS_DETAIL_FUNCTION_HPP
+
+#include <boost/callable_traits/detail/config.hpp>
+#include <boost/callable_traits/detail/qualifier_flags.hpp>
+#include <boost/callable_traits/detail/forward_declarations.hpp>
+#include <boost/callable_traits/detail/set_function_qualifiers.hpp>
+#include <boost/callable_traits/detail/default_callable_traits.hpp>
+
+namespace boost { namespace callable_traits { namespace detail {
+
+template<typename T>
+struct function : default_callable_traits<T> {};
+
+#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
+#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
+#include <boost/callable_traits/detail/unguarded/function.hpp>
+#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
+
+#ifndef BOOST_CLBL_TRTS_DISABLE_ABOMINABLE_FUNCTIONS
+
+#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const
+#include <boost/callable_traits/detail/unguarded/function.hpp>
+#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
+
+#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS volatile
+#include <boost/callable_traits/detail/unguarded/function.hpp>
+#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
+
+#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const volatile
+#include <boost/callable_traits/detail/unguarded/function.hpp>
+#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
+
+#ifndef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS
+
+#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS &
+#include <boost/callable_traits/detail/unguarded/function.hpp>
+#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
+
+#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS &&
+#include <boost/callable_traits/detail/unguarded/function.hpp>
+#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
+
+#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const &
+#include <boost/callable_traits/detail/unguarded/function.hpp>
+#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
+
+#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const &&
+#include <boost/callable_traits/detail/unguarded/function.hpp>
+#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
+
+#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS volatile &
+#include <boost/callable_traits/detail/unguarded/function.hpp>
+#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
+
+#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS volatile &&
+#include <boost/callable_traits/detail/unguarded/function.hpp>
+#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
+
+#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const volatile &
+#include <boost/callable_traits/detail/unguarded/function.hpp>
+#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
+
+#define BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS const volatile &&
+#include <boost/callable_traits/detail/unguarded/function.hpp>
+#undef BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
+
+#endif // #ifndef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS
+#endif // #ifndef BOOST_CLBL_TRTS_DISABLE_ABOMINABLE_FUNCTIONS
+
+// function pointers
+
+#define BOOST_CLBL_TRTS_CC_TAG dummy
+#define BOOST_CLBL_TRTS_VARARGS_CC BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
+#define BOOST_CLBL_TRTS_CC
+#define BOOST_CLBL_TRTS_ST
+#include <boost/callable_traits/detail/unguarded/function_ptr.hpp>
+#include <boost/callable_traits/detail/unguarded/function_ptr_varargs.hpp>
+#undef BOOST_CLBL_TRTS_ST
+#undef BOOST_CLBL_TRTS_CC
+#undef BOOST_CLBL_TRTS_CC_TAG
+#undef BOOST_CLBL_TRTS_VARARGS_CC
+
+/* ?
+#ifdef BOOST_CLBL_TRTS_ENABLE_CDECL
+#define BOOST_CLBL_TRTS_CC_TAG cdecl_tag
+#define BOOST_CLBL_TRTS_VARARGS_CC __cdecl
+#define BOOST_CLBL_TRTS_CC __cdecl
+#define BOOST_CLBL_TRTS_ST
+#include <boost/callable_traits/detail/unguarded/function_ptr.hpp>
+#undef BOOST_CLBL_TRTS_ST
+#undef BOOST_CLBL_TRTS_CC
+#undef BOOST_CLBL_TRTS_CC_TAG
+#undef BOOST_CLBL_TRTS_VARARGS_CC
+#endif*/
+
+#ifdef BOOST_CLBL_TRTS_ENABLE_STDCALL
+#define BOOST_CLBL_TRTS_CC_TAG stdcall_tag
+#define BOOST_CLBL_TRTS_VARARGS_CC BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
+#define BOOST_CLBL_TRTS_CC __stdcall
+#define BOOST_CLBL_TRTS_ST
+#include <boost/callable_traits/detail/unguarded/function_ptr.hpp>
+#undef BOOST_CLBL_TRTS_ST
+#undef BOOST_CLBL_TRTS_CC
+#undef BOOST_CLBL_TRTS_CC_TAG
+#undef BOOST_CLBL_TRTS_VARARGS_CC
+#endif
+
+#ifdef BOOST_CLBL_TRTS_ENABLE_FASTCALL
+#define BOOST_CLBL_TRTS_CC_TAG fastcall_tag
+#define BOOST_CLBL_TRTS_VARARGS_CC BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
+#define BOOST_CLBL_TRTS_CC __fastcall
+#define BOOST_CLBL_TRTS_ST
+#include <boost/callable_traits/detail/unguarded/function_ptr.hpp>
+#undef BOOST_CLBL_TRTS_CC
+#undef BOOST_CLBL_TRTS_ST
+#undef BOOST_CLBL_TRTS_CC_TAG
+#undef BOOST_CLBL_TRTS_VARARGS_CC
+#endif
+
+#ifdef BOOST_CLBL_TRTS_ENABLE_PASCAL
+#define BOOST_CLBL_TRTS_CC_TAG pascal_tag
+#define BOOST_CLBL_TRTS_VARARGS_CC BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
+#define BOOST_CLBL_TRTS_CC
+#define BOOST_CLBL_TRTS_ST pascal
+#include <boost/callable_traits/detail/unguarded/function_ptr.hpp>
+#undef BOOST_CLBL_TRTS_CC
+#undef BOOST_CLBL_TRTS_ST
+#undef BOOST_CLBL_TRTS_CC_TAG
+#undef BOOST_CLBL_TRTS_VARARGS_CC
+#endif
+
+template<typename T>
+struct function<T&> : std::conditional<function<T>::value,
+ function<T>, default_callable_traits<T&>>::type {
+
+ static constexpr const bool value = !std::is_pointer<T>::value;
+
+ using traits = function;
+ using base = function<T>;
+ using type = T&;
+ using remove_varargs = typename base::remove_varargs&;
+ using add_varargs = typename base::add_varargs&;
+
+ using remove_member_reference = reference_error;
+ using add_member_lvalue_reference = reference_error;
+ using add_member_rvalue_reference = reference_error;
+ using add_member_const = reference_error;
+ using add_member_volatile = reference_error;
+ using add_member_cv = reference_error;
+ using remove_member_const = reference_error;
+ using remove_member_volatile = reference_error;
+ using remove_member_cv = reference_error;
+
+ template<typename NewReturn>
+ using apply_return = typename base::template apply_return<NewReturn>&;
+
+ using clear_args = typename base::clear_args&;
+
+ template<typename... NewArgs>
+ using push_front = typename base::template push_front<NewArgs...>&;
+
+ template<typename... NewArgs>
+ using push_back = typename base::template push_back<NewArgs...>&;
+
+ template<std::size_t Count>
+ using pop_back = typename base::template pop_back<Count>&;
+
+ template<std::size_t Count>
+ using pop_front = typename base::template pop_front<Count>&;
+
+ template<std::size_t Index, typename... NewArgs>
+ using insert_args = typename base::template insert_args<Index, NewArgs...>&;
+
+ template<std::size_t Index, std::size_t Count>
+ using remove_args = typename base::template remove_args<Index, Count>&;
+
+ template<std::size_t Index, typename... NewArgs>
+ using replace_args = typename base::template replace_args<Index, NewArgs...>&;
+};
+
+}}} // namespace boost::callable_traits::detail
+
+#endif // #ifndef BOOST_CLBL_TRTS_DETAIL_FUNCTION_HPP