Jajajaja tengo que ver bien lo de los años bisiestos, mientras tanto segun tu enunciado quedaria asi no?
Código (c) [Seleccionar]
bool fechaValida(const int day, const int month, const int year){
int dias_mes[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
bool valido = true;
if(year % 4 == 0 && (!(year % 100 == 0) || (year % 400 == 0) ))
dias_mes[1] = 29;
if(month < 1 || month > 12 || day < 1 || day > dias_mes[month-1]) //Unica condicion
valido = false;
return valido;
}