The rules were specially written to cover
struct S { int i; std::string s; };
where without any user-created constructor, even if the implicitly created constructor is nontrivial by default, S().i will be initialized to zero. This cannot depend on the int constructor, since int has no constructor. It was decided that this would depend on whether the class S has a user-provided constructor. From this there can be no more.
What you see is a simple consequence of this. Your derived class also does not have a constructor provided by the user, so it also gets zero initialization.
source share