|
template<typename F , typename Obj , typename First , typename... Rest, meta::if_c< detail::is_function< F >::value, int > = 0> |
constexpr auto | operator() (F Obj::*ptr, First &&first, Rest &&... rest) const noexcept(noexcept(decltype(invoke_member_fn(std::is_base_of< Obj, detail::decay_t< First >>{}, is_reference_wrapper_t< detail::decay_t< First >>{}, ptr, static_cast< First && >(first), static_cast< Rest && >(rest)...))(invoke_member_fn(std::is_base_of< Obj, detail::decay_t< First >>{}, is_reference_wrapper_t< detail::decay_t< First >>{}, ptr, static_cast< First && >(first), static_cast< Rest && >(rest)...)))) -> decltype(invoke_member_fn(std::is_base_of< Obj, detail::decay_t< First >> |
|
template<typename Data , typename Obj , typename First , meta::if_c<!detail::is_function< Data >::value, int > = 0> |
constexpr auto | operator() (Data Obj::*ptr, First &&first) const noexcept(noexcept(decltype(invoke_member_data(std::is_base_of< Obj, detail::decay_t< First >>{}, is_reference_wrapper_t< detail::decay_t< First >>{}, ptr, static_cast< First && >(first)))(invoke_member_data(std::is_base_of< Obj, detail::decay_t< First >>{}, is_reference_wrapper_t< detail::decay_t< First >>{}, ptr, static_cast< First && >(first))))) -> decltype(invoke_member_data(std::is_base_of< Obj, detail::decay_t< First >> |
|
template<typename F , typename... Args, meta::if_c<!std::is_member_pointer< uncvref_t< F >>::value, int > = 0> |
constexpr auto | operator() (F &&fn, Args &&... args) const noexcept(noexcept(decltype(static_cast< F && >(fn)(static_cast< Args && >(args)...))(static_cast< F && >(fn)(static_cast< Args && >(args)...)))) -> decltype(static_cast< F && >(fn)(static_cast< Args && >(args)...)) |
|
| static_cast (first) |
|
| static_cast (rest)...)) |
|
| static_cast (first))) |
|