Detectando se converter um int para uma enum resulta em um valor não enumerado

Digamos que eu tenho algo parecido com isto:

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

CardColor MyColor = static_cast<CardColor>(100);

Existe uma maneira (simples) de detectar, em tempo de compilação ou em tempo de execução, que o valor deMyColor não corresponde a nenhum valor enumerado?

E de maneira mais geral, se os valores de enumeração não estiverem se seguindo, por exemplo:

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

questionAnswers(6)

yourAnswerToTheQuestion