Detectar si convertir un int en una enumeración da como resultado un valor no enumerado

Digamos que tengo algo como esto:

enum CardColor { HEARTS, DIAMONDS, CLUBS, SPADES};

CardColor MyColor = static_cast<CardColor>(100);

¿Hay alguna forma (simple) de detectar, ya sea en tiempo de compilación o en tiempo de ejecución, que el valor deMyColor no corresponde a ningún valor enumerado?

Y más generalmente, si los valores de enumeración no se siguen entre sí, por ejemplo:

enum CardColor { HEARTS = 0, DIAMONDS, CLUBS = 4, SPADES};

Respuestas a la pregunta(6)

Su respuesta a la pregunta