¿Por qué las variables miembro estáticas no funcionan bien con el operador ternario?

Aquí está el trato. Tengo una clase estática que contiene varias funciones estáticas utilizadas para obtener entrada. La clase contiene una variable miembro estática privada para indicar si el usuario ingresó alguna información. Cada método de entrada verifica si el usuario ingresó alguna información y establece la variable de estado en consecuencia. Creo que este sería un buen momento para usar el operador ternario. Desafortunadamente, no puedo, porque al compilador no le gusta eso.

Repliqué el problema, luego simplifiqué mi código tanto como fue posible para que fuera más fácil de entender. Este no es mi código original.

Aquí está mi archivo de encabezado:

#include <iostream>

using namespace std;

class Test {
public:
    void go ();
private:
    static const int GOOD = 0;
    static const int BAD = 1;
};

Aquí está mi implementación con el operador ternario:

#include "test.h"

void Test::go () {
    int num = 3;
    int localStatus;
    localStatus = (num > 2) ? GOOD : BAD;
}

Aquí está la función principal:

#include <iostream>
#include "test.h"

using namespace std;

int main () {
    Test test = Test();
    test.go();
    return 0;
}

Cuando intento compilar esto, recibo este mensaje de error:

test.o: In function `Test::go()':
test.cpp:(.text+0x17): undefined reference to `Test::GOOD'
test.cpp:(.text+0x1f): undefined reference to `Test::BAD'
collect2: ld returned 1 exit status

Sin embargo, si reemplazo esto:

localStatus = (num > 2) ? GOOD : BAD;

con este

if (num > 2) {
    localStatus = GOOD;
} else {
    localStatus = BAD;
}

El código se compila y se ejecuta como se esperaba. ¿Qué oscura regla de C ++ o caso de esquina de GCC es responsable de esta locura? (Estoy usando GCC 4.4.1 en Ubuntu 9.10.)

Respuestas a la pregunta(3)

Su respuesta a la pregunta