Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:29:45

0001 /*
0002 
0003 @Copyright Barrett Adair 2015-2017
0004 Distributed under the Boost Software License, Version 1.0.
0005 (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
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 }}} // namespace boost::callable_traits::detail
0052 
0053 #endif