#include template struct Pack { }; /* Implement Add_Type and Remove_Type */ int main() { // Testing Add_Type { using Target = int; using Indata = Pack; using Answer = Pack; using Result = typename Add_Type::type; static_assert( std::is_same_v ); } // No types to remove { using Target = int; using Indata = Pack; using Answer = Pack; using Result = typename Remove_Type::type; static_assert( std::is_same_v ); } // One to remove, in the beginning { using Target = int; using Indata = Pack; using Answer = Pack; using Result = typename Remove_Type::type; static_assert( std::is_same_v ); } // Multiple to remove, not in the beginning, other than int { using Target = float; using Indata = Pack; using Answer = Pack; using Result = typename Remove_Type::type; static_assert( std::is_same_v ); } }