#ifndef ELFSPY_VARIADIC_H #define ELFSPY_VARIADIC_H namespace spy { /** * @namespace spy * @class Variadic * get the n'th argument from a variadic parameter list */ template struct Variadic; template struct Variadic<0, T, ArgTypes...> { typedef T Type; static T&& get(T&& first, ArgTypes&&...) { return std::forward(first); } }; template struct Variadic { using Next = Variadic; using Type = typename Next::Type; static Type&& get(T&& first, ArgTypes&&... args) { return std::forward(Next::get(std::forward(args)...)); } }; } // namespace elfspy #endif