definido (VARIABLE) no evaluado correctamente por MSVC?

Ejecutando el siguiente código

#include <iostream>

#define FOO
#define BAR defined(FOO)

int main() {
#if BAR
    std::cout << "BAR enabled!" << std::endl;
#else
    std::cout << "BAR disabled!" << std::endl;
#endif
    return 0;
}

enEstudio visual muestraBar disabled!, mientras ejecuta el mismo código engcc osonido metálico muestraBar enabled!.

¿Es esto un error en el compilador de Microsoft? ¿Qué es correcto según el estándar?

Respuestas a la pregunta(1)

Su respuesta a la pregunta