C++ doesn't do any kind of "constructor matching". If you do not explicitly call the base class constructor, the default one is called (well, technically, the base class subobject is "value initialized", but for classes with constructors this is the same thing).