#pragma once namespace saw { template struct parameter_pack_index; template struct parameter_pack_index { static constexpr size_t value = 0u; }; template struct parameter_pack_index { static constexpr size_t value = 1u + parameter_pack_index::value; }; template struct parameter_pack_type; template struct parameter_pack_type<0, TN, T...> { using type = TN; }; template struct parameter_pack_type { static_assert(sizeof...(T) > 0, "Exhausted parameters"); using type = typename parameter_pack_type::type; }; }