summaryrefslogtreecommitdiff
path: root/boost/callable_traits/detail/pmd.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/callable_traits/detail/pmd.hpp')
-rw-r--r--boost/callable_traits/detail/pmd.hpp53
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