C++11 §12.1/5 states:
A default constructor for a class
X
is a constructor of classX
that can be called without an argument. If there is no user-declared constructor for classX
, a constructor having no parameters is implicitly declared as defaulted (8.4).
Your Base(const Base&) = delete;
counts as a user-declared constructor, so it suppresses generation of the implicit default constructor. The workaround is of course to declare it:
Base() = default;