function_object.hpp
Go to the documentation of this file.
1 /*
2 
3 @Copyright Barrett Adair 2015-2017
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 */
8 
9 #ifndef BOOST_CLBL_TRTS_DETAIL_FUNCTION_OBJECT_HPP
10 #define BOOST_CLBL_TRTS_DETAIL_FUNCTION_OBJECT_HPP
11 
16 
17 namespace boost { namespace callable_traits { namespace detail {
18 
19 template<typename T, typename Base>
20 struct function_object : Base {
21 
22  using type = T;
24  using function_type = typename Base::function_object_signature;
25  using arg_types = typename Base::non_invoke_arg_types;
27 
28  static constexpr const bool value = std::is_class<
29  typename std::remove_reference<T>::type>::value;
30 
36  using is_noexcept = typename Base::is_noexcept;
39  using is_transaction_safe = typename Base::is_transaction_safe;
43 
44  template<template<class...> class Container>
47 
48  template<template<class...> class Container, typename... RightArgs>
50  expand_args_left<Container, RightArgs...>;
51 
52  template<template<class...> class Container, typename... LeftArgs>
54  expand_args_right<Container, LeftArgs...>;
55 
56  template<typename C, typename U = T>
58  typename std::remove_reference<U>::type C::*;
59 
60  template<typename>
62 
63  template<typename...>
65 
66  template<typename...>
67  using push_back = error_t;
68 
69  template<std::size_t ElementCount>
71 
72  template<std::size_t ElementCount>
74 
75  template<std::size_t Index, typename... NewArgs>
77 
78  template<std::size_t Index, std::size_t Count>
80 
81  template<std::size_t Index, typename... NewArgs>
83 
84  template<std::size_t Count>
85  using pop_front = error_t;
86 
87  template<std::size_t Count>
88  using pop_back = error_t;
89 
99 };
100 
101 template<typename T, typename U, typename Base>
102 struct function_object <T U::*, Base>
104 
105 }}} // namespace boost::callable_traits::detail
106 
107 #endif // #ifndef BOOST_CLBL_TRTS_DETAIL_FUNCTION_OBJECT_HPP
typename std::conditional< std::is_reference< T >::value, reference_error, invalid_type >::type error_type
Definition: utility.hpp:28
typename function< function_type >::template expand_args< Container > expand_args
typename Base::function_object_signature function_type
typename Base::non_invoke_arg_types arg_types
typename function< function_type >::template expand_args_left< Container, RightArgs... > expand_args_left
typename Base::is_transaction_safe is_transaction_safe
typename function< function_type >::template expand_args_right< Container, LeftArgs... > expand_args_right
typename std::remove_reference< U >::type C::* apply_member_pointer