Détecter si la conversion d'un int en enum entraîne une valeur non énumérée

Disons que j'ai quelque chose comme ceci :

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

CardColor MyColor = static_cast<CardColor>(100);

Est-il un (simple) de façon à détecter, soit au moment de la compilation ou à l'exécution, que la valeur de MyColor ne correspond à aucune valeur énumérée ?

Et plus généralement, si les valeurs enum ne sont pas à la suite les uns des autres, par exemple :

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

source d'informationauteur Jérôme