Обратите внимание: этот ответ основан исключительно на предположениях, если кто-то отправит хороший ответ, основанный на фактических знаниях о том, как работает IntelliSense, я буду рад объявить его и удалить мой.
Я полагаю, что у IntelliSense есть какой-то особый случай для обработки по умолчанию наиболее распространенных макросов MFC / ATL, или, возможно, предполагается, что некоторые заголовки по умолчанию могут быть включены, чтобы иметь возможность обрабатывать тот факт, что ваш файл, даже если он не ' t включают заголовки MFC, могут быть включены в .cpp
, где такие заголовки по умолчанию уже включены (что часто видно в заголовках, даже если они должны включать их зависимости).
Но будучи BEGIN_MSG_MAP_FOO
совершенно неизвестным макросом, он начинает вести себя забавно, потому что на самом деле это неизвестный идентификатор, вероятно, интерпретируемый как некий неизвестный макрос, который может закрыть текущую область. Таким образом, после этого он «воспроизводит это безопасно» и перезапускает синтаксический анализ, как это было в начале нового файла, и думает, что test
является глобальной функцией (что подтверждается верхним левым списком), где this
делает нет смысла.