Overkill answer: with unique_ptr
and a custom deleter!
struct placement_delete {
template <typename T>
void operator () (T* ptr) const {
ptr->~T();
}
};
std::aligned_storage<sizeof(Implementation)>::type space;
std::unique_ptr<AbstractBase,placement_delete> base{new (&space) Implementation};