3 #include <boost/type_traits.hpp> 6 namespace hmbdc {
namespace pattern {
8 struct function_traits: function_traits<decltype(&T::operator())>
11 template <
typename ClassType,
typename ReturnType,
typename... Args>
12 struct function_traits<ReturnType(ClassType::*)(Args...) const> {
13 enum { arity =
sizeof...(Args) };
14 typedef ReturnType result_type;
18 using type =
typename std::tuple_element<i, std::tuple<Args...>>::type;
22 template <
typename ClassType,
typename ReturnType,
typename... Args>
23 struct function_traits<ReturnType(ClassType::*)(Args...)> {
24 enum { arity =
sizeof...(Args) };
26 typedef ReturnType result_type;
30 using type =
typename std::tuple_element<i, std::tuple<Args...>>::type;
34 template <
typename Base,
typename Derived>
35 struct is_first_base_of{
37 value = std::is_base_of<Base, Derived>::value
38 && (Base
const*)((Derived
const*)0xffff) == ((Base
const*)0xffff)