definido (VARIÁVEL) não foi avaliado corretamente pelo MSVC?

Executando o seguinte 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;
}

noEstúdio visual exibeBar disabled!, enquanto executa o mesmo código emgcc ouclang exibeBar enabled!.

Isso é um bug no compilador da Microsoft? O que é correto de acordo com o padrão?

questionAnswers(1)

yourAnswerToTheQuestion