#ifndef SkCallableTraits_DEFINED
#define SkCallableTraits_DEFINED
#include <type_traits>
#include <tuple>
template <typename R, typename... Args> struct sk_base_callable_traits { … };
#define SK_CALLABLE_TRAITS__COMMA …
#define SK_CALLABLE_TRAITS__VARARGS …
#ifdef __cpp_noexcept_function_type
#define SK_CALLABLE_TRAITS__NE_VARARGS …
#else
#define SK_CALLABLE_TRAITS__NE_VARARGS …
#endif
#define SK_CALLABLE_TRAITS__REF_NE_VARARGS …
#define SK_CALLABLE_TRAITS__CV_REF_NE_VARARGS …
template <typename T> struct SkCallableTraits : SkCallableTraits<decltype(&T::operator())> { … };
#define SK_CALLABLE_TRAITS__INSTANCE …
SK_CALLABLE_TRAITS__CV_REF_NE_VARARGS
#undef SK_CALLABLE_TRAITS__INSTANCE
#define SK_CALLABLE_TRAITS__INSTANCE …
SK_CALLABLE_TRAITS__NE_VARARGS
#undef SK_CALLABLE_TRAITS__INSTANCE
#define SK_CALLABLE_TRAITS__INSTANCE …
SK_CALLABLE_TRAITS__CV_REF_NE_VARARGS
#undef SK_CALLABLE_TRAITS__INSTANCE
SkCallableTraits<R T::*>;
#undef SK_CALLABLE_TRAITS__CV_REF_NE_VARARGS
#undef SK_CALLABLE_TRAITS__REF_NE_VARARGS
#undef SK_CALLABLE_TRAITS__NE_VARARGS
#undef SK_CALLABLE_TRAITS__VARARGS
#undef SK_CALLABLE_TRAITS__COMMA
#endif