#pragma once #include template typename Container> class pack : protected Container { public: using Container::Container; using Container::begin; using Container::end; using Container::rbegin; using Container::rend; using Container::cbegin; using Container::cend; using Container::crbegin; using Container::crend; using Container::clear; using Container::empty; using Container::size; using Container::capacity; using Container::shrink_to_fit; using Container::at; using Container::data; using Container::operator[]; template decltype(auto) emplace(Ps &&... ps) { return Container::emplace_back(std::forward(ps)...); } void erase(typename Container::iterator pos) { if (&*pos != &Container::back()) { *pos = std::move(Container::back()); } Container::pop_back(); } };