mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-12-23 16:03:05 +00:00
53 lines
1.5 KiB
C++
53 lines
1.5 KiB
C++
/*
|
|
|
|
@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
|