#pragma once #include #include #include namespace vlc { template struct function_traits : public function_traits {}; template struct function_traits { static const size_t nargs = sizeof...(Args); using result_type = R; using function_type = R(Args...); template struct arg { using type = typename std::tuple_element>::type; }; }; template struct function_traits : public function_traits {}; template struct function_traits : public function_traits { typedef ClassType& owner_type; }; template struct function_traits : public function_traits { typedef const ClassType& owner_type; }; template struct function_traits : public function_traits { typedef volatile ClassType& owner_type; }; template struct function_traits : public function_traits { typedef const volatile ClassType& owner_type; }; template struct function_traits> : public function_traits {}; }