C ++ si la condición no funciona

Tengo una matriz de objetos

Passenger travellers[] = {
    Passenger(nullptr, "Toronto", 2018, 4, 20),
    Passenger("", "Toronto", 2018, 4, 20),
    Passenger("John Smith", nullptr, 2018, 4, 20),
    Passenger("John Smith", "", 2018, 4, 20),
    Passenger("John Smith", "Toronto", 2018, 4, 20), // valid
    Passenger("John Smith", "Toronto", 2028, 4, 20),
    Passenger("John Smith", "Toronto", 2014, 4, 20),
    Passenger("John Smith", "Toronto", 2020, 12, 31), // valid
    Passenger("John Smith", "Toronto", 2018, 40, 20),
    Passenger("John Smith", "Toronto", 2018, 0, 20),
    Passenger("John Smith", "Toronto", 2017, 1, 1), // valid
    Passenger("John Smith", "Toronto", 2018, 4, 0),
    Passenger("John Smith", "Toronto", 2018, 4, 32),
    Passenger(nullptr, nullptr, 0, 0, 0),
    Passenger()
};

y mis constructores son:

Constructor predeterminad

Passenger::Passenger() {
    p_name[0] = '\0';
    p_dest[0] = '\0';

    // destination date
    d_yy = 0;
    d_mm = 0;
    d_dd = 0;
}

Y mi otro constructor con parámetros son:

Passenger::Passenger(const char *name, const char *destination, int year, int month, int days) {

    if (name != nullptr && destination != nullptr && name[0] != '\0' && destination[0] != '\0') {
        if (year >= 2017 && year <= 2020 && month >= 1 && month <= 12 && days >= 1 && days <= 31) {
            strncpy(p_name, name, 32);
            strncpy(p_dest, destination, 32);
            d_yy = year;
            d_mm = month;
            d_dd = days;
        }
        else 
            Passenger();
    }
    else
        Passenger();
}

Problema es que el resto de los objetos deben devolver "no válido" pero el primer objeto devuelve "válido" en lugar de tener un nullptr valor. Alguien sabe lo que estoy haciendo mal?

Respuestas a la pregunta(2)

Su respuesta a la pregunta