#ifndef ANDROID_PDX_RPC_FUNCTION_TRAITS_H_ #define ANDROID_PDX_RPC_FUNCTION_TRAITS_H_ #include #include namespace android { namespace pdx { namespace rpc { // Utility type to capture return and argument types of a function signature. // Examples: // typedef SignatureType SignatureType; // using SignatureType = SignatureType; template using SignatureType = T; // Utility class to extract return and argument types from function types. // Provides nested types for return value, arguments, and full signature. Also // provides accessor types for individual arguments, argument-arity, and type // substitution. template struct FunctionTraits; template struct FunctionTraits { using Return = Return_; using Args = std::tuple; using Signature = SignatureType; enum : std::size_t { Arity = sizeof...(Args_) }; template using Arg = typename std::tuple_element::type; template using RewriteArgs = SignatureType...)>; template using RewriteSignature = SignatureType( ConditionalRewrite...)>; template