diff options
Diffstat (limited to 'boost/callable_traits/detail/pmd.hpp')
-rw-r--r-- | boost/callable_traits/detail/pmd.hpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/boost/callable_traits/detail/pmd.hpp b/boost/callable_traits/detail/pmd.hpp new file mode 100644 index 0000000000..13a2c44633 --- /dev/null +++ b/boost/callable_traits/detail/pmd.hpp @@ -0,0 +1,53 @@ +/* + +@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_PMD_HPP +#define BOOST_CLBL_TRTS_DETAIL_PMD_HPP + +#include <boost/callable_traits/detail/forward_declarations.hpp> +#include <boost/callable_traits/detail/function.hpp> +#include <boost/callable_traits/detail/traits.hpp> +#include <boost/callable_traits/detail/default_callable_traits.hpp> +#include <boost/callable_traits/detail/utility.hpp> + +namespace boost { namespace callable_traits { namespace detail { + +template<typename T> +struct pmd : default_callable_traits<T> {}; + +template<typename D, typename T> +struct pmd<D T::*> : default_callable_traits<> { + + static constexpr bool value = true; + + using traits = pmd; + using class_type = T; + using invoke_type = T const &; + using type = D T::*; + using function_type = typename std::add_lvalue_reference<D>::type(invoke_type); + using qualified_function_type = D(invoke_type); + using arg_types = std::tuple<invoke_type>; + using non_invoke_arg_types = std::tuple<>; + + using return_type = typename std::add_lvalue_reference<D>::type; + + template<typename C> + using apply_member_pointer = D C::*; + + template<typename R> + using apply_return = R T::*; + + template<template<class...> class Container> + using expand_args = Container<invoke_type>; + + using is_member_pointer = std::true_type; +}; + +}}} // namespace boost::callable_traits::detail + +#endif |