#include <type_traits> template <typename...> struct Pack { }; /* Implement Reverse here */ int main() { { using Input = Pack<>; using Output = Pack<>; using Result = typename Reverse<Input>::type; static_assert( std::is_same_v<Result, Output> ); } { using Input = Pack<int>; using Output = Pack<int>; using Result = typename Reverse<Input>::type; static_assert( std::is_same_v<Result, Output> ); } { using Input = Pack<int, float>; using Output = Pack<float, int>; using Result = typename Reverse<Input>::type; static_assert( std::is_same_v<Result, Output> ); } { using Input = Pack<int, float, bool>; using Output = Pack<bool, float, int>; using Result = typename Reverse<Input>::type; static_assert( std::is_same_v<Result, Output> ); } }