-struct ReturnOnFailure {
- static inline int unmarshall_args_failure() {
- return rpc_const::unmarshal_args_failure;
- }
-};
+template<class P, class R, class ...Args>
+struct is_valid_call : false_type {};
+
+template<class S, class R, class ...Args>
+struct is_valid_call<S(R &, Args...), R, Args...> : true_type {};
+
+template<class P, class F>
+struct is_valid_registration : false_type {};
+
+template<class S, class R, class ...Args>
+struct is_valid_registration<
+ S(R &, typename std::decay<Args>::type...),
+ S(R &, Args...)> : true_type {};
+
+template<class P, class C, class S, class R, class ...Args>
+struct is_valid_registration<
+ P,
+ S(C::*)(R &, Args...)> : is_valid_registration<P, S(R &, Args...)> {};