Почему статические члены const не могут появляться в постоянном выражении, таком как «switch»

У меня есть следующее объявление некоторых статических членов const

.час

class MyClass : public MyBase
{
public:
    static const unsigned char sInvalid;
    static const unsigned char sOutside;
    static const unsigned char sInside;
    //(41 more ...)
}

.cpp

const unsigned char MyClass::sInvalid = 0;
const unsigned char MyClass::sOutside = 1;
const unsigned char MyClass::sInside = 2;
//and so on

В какой-то момент я хочу использовать эти значения в переключателе, как:

unsigned char value;
...
switch(value) {
    case MyClass::sInvalid : /*Do some ;*/ break;
    case MyClass::sOutside : /*Do some ;*/ break;
    ...
}

Но я получаю следующую ошибку компилятора:error: 'MyClass::sInvalid' cannot appear in a constant-expression.

Я прочитал другое переключение-не могу-появиться-постоянный материал и не нашел ответа для меня, так как я не понимаю, почему теstatic const unsigned char не являются константным выражением.

Я использую GCC 4.5.

Ответы на вопрос(3)

Ваш ответ на вопрос