defined (VARIABLE) von MSVC nicht korrekt ausgewertet?

Den folgenden Code ausführen

#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;
}

imVisual Studio zeigt @ Bar disabled!, während derselbe Code in @ ausgeführt wi gcc oder clang zeigt @ Bar enabled!.

Ist das ein Fehler im Microsoft Compiler? Was ist laut Norm richtig?