pmd.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_PMD_HPP
10 #define BOOST_CLBL_TRTS_DETAIL_PMD_HPP
11 
17 
18 namespace boost { namespace callable_traits { namespace detail {
19 
20 template<typename T>
22 
23 template<typename D, typename T>
24 struct pmd<D T::*> : default_callable_traits<> {
25 
26  static constexpr bool value = true;
27 
28  using traits = pmd;
29  using class_type = T;
30  using invoke_type = T const &;
31  using type = D T::*;
32  using function_type = typename std::add_lvalue_reference<D>::type(invoke_type);
34  using arg_types = std::tuple<invoke_type>;
35  using non_invoke_arg_types = std::tuple<>;
36 
37  using return_type = typename std::add_lvalue_reference<D>::type;
38 
39  template<typename C>
40  using apply_member_pointer = D C::*;
41 
42  template<typename R>
43  using apply_return = R T::*;
44 
45  template<template<class...> class Container>
46  using expand_args = Container<invoke_type>;
47 
48  using is_member_pointer = std::true_type;
49 };
50 
51 }}} // namespace boost::callable_traits::detail
52 
53 #endif
typename std::conditional< std::is_same< L, error_t >::value||std::is_same< Class, error_t >::value, error_t, L Class::* >::type apply_member_pointer