Interface-based polymorphic collection
As usual with your code, I can only come up with very minor nitpicks.

With both push functions, there is a small chance of a memory leak. After the construction of a new Adapter&lt;T&gt; using:

auto ptr = new Adapter&lt;T&gt;{ std::forward&lt;Args&gt;(args)... };


If entities.emplace_back(ptr); fails (say if relocation is required, the vector needs to expand, and this fails), then ptr will leak. Instead of doing it this way, I'd suggest using make_unique and moving the unique_ptr into entities using push_back instead:

template&lt;typename T, typename... Args&gt;
auto push(Args&amp;&amp;... args)
    -&gt; void
{
    auto ptr = std::make_unique&lt;Adapter&lt;T&gt;&gt;(std::forward&lt;Args&gt;(args)...);
    entities.push_back(std::move(ptr));
}