Вы можете проверить, что происходит на самом деле, используя директиву #error
:
#ifdef MY_DEFINE
#error It was defined
#else
#error It was NOT defined
std::string txt = "abc";
#endif
output += txt;
Возможно, что MY_DEFINE
действительно определено в каком-то другом файле заголовка, который вы включаете. Обычно самый простой способ определить это в Visual Studio - просто навести курсор мыши на идентификатор и посмотреть, что он говорит, или ctrl + щелкнуть, чтобы go для определения. Но иногда эти подсказки в IDE не совсем соответствуют тому, что происходит при компиляции.