#ifndef BOOST_CLBL_TRTS_DETAIL_FORWARD_DECLARATIONS #define BOOST_CLBL_TRTS_DETAIL_FORWARD_DECLARATIONS #include #include namespace boost { namespace callable_traits { namespace detail { template struct function; template struct has_normal_call_operator { template struct check { check(std::nullptr_t) {} }; template static std::int8_t test( check); template static std::int16_t test(...); static constexpr bool value = sizeof(test(nullptr)) == sizeof(std::int8_t); }; struct callable_dummy { void operator()() {} }; template using default_to_function_object = typename std::conditional< has_normal_call_operator::value, T, callable_dummy>::type; template struct pmf; template struct pmd; template::type> using function_object_base = typename std::conditional< has_normal_call_operator::value, pmf::operator())>, default_callable_traits>::type; template> struct function_object; }}} // namespace boost::callable_traits::detail #endif // #ifndef BOOST_CLBL_TRTS_DETAIL_FORWARD_DECLARATIONS