#include <cstdio>
#include <string>
+#include <tuple>
#undef Bool // b/127920555
template<class T>
void Return(RValue<Pointer<T>> ret);
- template<unsigned int index, typename... Arguments>
- struct ArgI;
-
- template<typename Arg0, typename... Arguments>
- struct ArgI<0, Arg0, Arguments...>
- {
- typedef Arg0 Type;
- };
-
- template<unsigned int index, typename Arg0, typename... Arguments>
- struct ArgI<index, Arg0, Arguments...>
- {
- typedef typename ArgI<index - 1, Arguments...>::Type Type;
- };
-
// Generic template, leave undefined!
template<typename FunctionType>
class Function;
virtual ~Function();
template<int index>
- Argument<typename ArgI<index, Arguments...>::Type> Arg() const
+ Argument<typename std::tuple_element<index, std::tuple<Arguments...>>::type> Arg() const
{
Value *arg = Nucleus::getArgument(index);
- return Argument<typename ArgI<index, Arguments...>::Type>(arg);
+ return Argument<typename std::tuple_element<index, std::tuple<Arguments...>>::type>(arg);
}
Routine *operator()(const char *name, ...);
{
};
- template<int index, typename Return, typename... Arguments>
- Argument<typename ArgI<index, Arguments...>::Type> Arg(Function<Return(Arguments...)> &function)
- {
- return Argument<typename ArgI<index, Arguments...>::Type>(function.arg(index));
- }
-
RValue<Long> Ticks();
}