Q:

C++ subclass constructor is ignored

In the following code, when I initialize a subclass with an argument of the same class, the program calls the parent class constructor but not the subclass's [derived3]. However, if I pass in an argument belonging to just the parent class, it calls both functions correctly [derived2]. Why would the compiler ignore the subclass constructor in the former case?
#include <iostream>

class Base {
public:
    Base() {
        std::cout << "Base constructor" << std::endl;
    }
    Base(Base& b) {
        std::cout << "Base parameterized constructor" << std::endl;
    }
};

class Derived : public Base {
public:
    Derived() {
        std::cout << "Derived constructor" << std::endl;
    }

    Derived(Base& b) : Base(b) {
        std::cout << "Derived parameterized constructor" << std::endl;
    }
};

int main(int argc, char **argv) {
    std::cout << "[base]" << std::endl;
    Base base {};
    std::cout << "[derived]" << std::endl;
    Derived derived {};

    std::cout << "[base2]" << std::endl;
    Base base2 {base};
    std::cout << "[derived2]" << std::endl;
    Derived derived2 {base};
    
    std::cout << "[base3]" << std::endl;
    Base base3 {derived};
    std::cout << "[derived3]" << std::endl;
    Derived derived3 {derived};
}

Output:

[base]
Base constructor
[derived]
Base constructor
Derived constructor
[base2]
Base parameterized constructor
[derived2]
Base parameterized constructor
Derived parameterized constructor
[base3]
Base parameterized constructor
[derived3]
Base parameterized constructor

A:

When you do
Derived derived3 {derived};

You are making a copy, so the copy constructor is called.  Since you did not override the copy constructor with your own that prints a statement, you only see the base copy constructor get called.
Adding
Derived(Derived& d) : Base(d) {
    std::cout << "Derived copy constructor" << std::endl;
}

will give you two print statements for the derived3 line.

