File indexing completed on 2025-01-18 09:29:45
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef BOOST_CLBL_TRTS_DETAIL_PMD_HPP
0010 #define BOOST_CLBL_TRTS_DETAIL_PMD_HPP
0011
0012 #include <boost/callable_traits/detail/forward_declarations.hpp>
0013 #include <boost/callable_traits/detail/function.hpp>
0014 #include <boost/callable_traits/detail/traits.hpp>
0015 #include <boost/callable_traits/detail/default_callable_traits.hpp>
0016 #include <boost/callable_traits/detail/utility.hpp>
0017
0018 namespace boost { namespace callable_traits { namespace detail {
0019
0020 template<typename T>
0021 struct pmd : default_callable_traits<T> {};
0022
0023 template<typename D, typename T>
0024 struct pmd<D T::*> : default_callable_traits<> {
0025
0026 static constexpr bool value = true;
0027
0028 using traits = pmd;
0029 using class_type = T;
0030 using invoke_type = T const &;
0031 using type = D T::*;
0032 using function_type = typename std::add_lvalue_reference<D>::type(invoke_type);
0033 using qualified_function_type = D(invoke_type);
0034 using arg_types = std::tuple<invoke_type>;
0035 using non_invoke_arg_types = std::tuple<>;
0036
0037 using return_type = typename std::add_lvalue_reference<D>::type;
0038
0039 template<typename C>
0040 using apply_member_pointer = D C::*;
0041
0042 template<typename R>
0043 using apply_return = R T::*;
0044
0045 template<template<class...> class Container>
0046 using expand_args = Container<invoke_type>;
0047
0048 using is_member_pointer = std::true_type;
0049 };
0050
0051 }}}
0052
0053 #endif