123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- /*
- @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
|