namespace _detail {
template <typename T, typename P, typename F>
-Eina_Bool really_call_event(T& wrapper, F& f, void *, std::true_type, std::true_type)
+void really_call_event(T& wrapper, F& f, void *, std::true_type)
{
f(wrapper);
- return true;
}
template <typename T, typename P, typename F>
-Eina_Bool really_call_event(T& wrapper, F& f, void *info, std::true_type, std::false_type)
+void really_call_event(T& wrapper, F& f, void *info, std::false_type)
{
f(wrapper, convert_to_event<P>(info));
- return true;
-}
-template <typename T, typename P, typename F>
-Eina_Bool really_call_event(T& wrapper, F& f, void *, std::false_type, std::true_type)
-{
- return f(wrapper);
-}
-template <typename T, typename P, typename F>
-Eina_Bool really_call_event(T& wrapper, F& f, void *info, std::false_type, std::false_type)
-{
- return f(wrapper, convert_to_event<P>(info));
}
-template <typename T, typename P, typename F, typename Enable = void>
-struct is_void;
-template <typename T, typename P, typename F>
-struct is_void<T, P, F, typename std::enable_if
- <std::is_void<decltype(std::declval<F>()(std::declval<T>(), std::declval<P>()))>::value>::type>
- : std::true_type {};
-template <typename T, typename P, typename F>
-struct is_void<T, P, F, typename std::enable_if
- <!std::is_void<decltype(std::declval<F>()(std::declval<T>(), std::declval<P>()))>::value>::type>
- : std::false_type {};
-template <typename T, typename F>
-struct is_void<T, void, F, typename std::enable_if
- <std::is_void<decltype(std::declval<F>()(std::declval<T>()))>::value>::type>
- : std::true_type {};
-template <typename T, typename F>
-struct is_void<T, void, F, typename std::enable_if
- <!std::is_void<decltype(std::declval<F>()(std::declval<T>()))>::value>::type>
- : std::false_type {};
-
template <typename T, typename P, typename F>
-Eina_Bool
-event_callback(void *data, ::Eo_Event const* event)
+void event_callback(void *data, ::Eo_Event const* event)
{
T wrapper(::eo_ref(event->object));
F *f = static_cast<F*>(data);
- return _detail::really_call_event<T, P>
- (wrapper, *f, event->info, is_void<T, P, F>(), std::is_void<P>{});
+ _detail::really_call_event<T, P>
+ (wrapper, *f, event->info, std::is_void<P>{});
}
}