|
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))) |
|