9#ifndef BOOST_CLBL_TRTS_APPLY_MEMBER_POINTER_HPP
10#define BOOST_CLBL_TRTS_APPLY_MEMBER_POINTER_HPP
14namespace boost {
namespace callable_traits {
22 template<typename T, typename C, bool = std::is_class<C>::value>
25 template<
typename T,
typename C>
27 using type =
typename std::remove_reference<T>::type C::*;
35 template<
typename T,
typename C>
40 template<
typename T,
typename C>
52template<
typename T,
typename C>
63 second_template_argument_must_be_a_class_or_struct> >;
67 template<
typename T,
typename C,
typename = std::false_type>
70 template<
typename T,
typename C>
72 apply_member_pointer_t<T, C>, detail::dummy>::type>
80template<
typename T,
typename C>
typename std::conditional< std::is_reference< T >::value, reference_error, invalid_type >::type error_type
typename std::conditional< std::is_same< T, invalid_type >::value, Fallback, T >::type fallback_if_invalid
typename BOOST_CLBL_TRTS_DISJUNCTION(function_object< unwrap_reference< T > >, function< T >, pmf< T >, pmd< T >, default_callable_traits< T >)::traits traits
typename make_member_pointer< T, C >::type make_member_pointer_t
typename BOOST_CLBL_TRTS_DISJUNCTION(FailIfs..., success< T >)::_::type sfinae_try
detail::sfinae_try< detail::fallback_if_invalid< typename detail::traits< T >::template apply_member_pointer< C >, typename detail::make_member_pointer< T, C >::type >, detail::fail_when_same< void, T, members_cannot_have_a_type_of_void >, detail::fail_if<!std::is_class< C >::value, second_template_argument_must_be_a_class_or_struct > > apply_member_pointer_t
#define BOOST_CLBL_TRTS_SFINAE_MSG(origin, name)
#define BOOST_CLBL_TRTS_DEFINE_SFINAE_ERROR_ORIGIN(origin)
apply_member_pointer_t< T, C > type
typename std::remove_reference< T >::type C::* type