>>159
1. 型エラーについて
型エラー : invalid conversion from `int' to `Keyname'
列挙子に対しては、「明示的」 にしか、整数系データ型の値を入れることはできない。
従って、直接数値を代入する書き方は違法であり、型エラーとなる。
Keyname optionkey = 5; // 型エラー
Keyname optionkey = Keyname(5); // ok

2. 列挙子の範囲について
例えば、
enum Keyname { keyShift = 1, keyCtrl = 2, keyAlt = 4 };
と定義したときの、Keyname型の上限値は 「7」 である。
これは、
> 列挙の上限は、列挙に含まれるすべての列挙子の値よりも大きい
> 2の累乗値マイナス1のなかでもっとも小さい値である。
による。

もし>>159がこれまで列挙子について誤解をしていたのなら、
文字通りの例が禿本(プログラミング言語C++ 第3版)の§4.8 列挙(手元の第一刷ではp.112)
に書かれているから、読み直して勉強するといい。