Запуск 64-битной версии компилятора с недокументриованной опцией /BE и опцией /c приводит к компиляции фтронтендом EDG, который используется интеллисенсом; это позволяет ловить ошибки интеллисенса как ошибки компилятора.
#ifdef __EDG__ позволяет детектить компиляцию EDG (включая и intellisence и cl /BE /c)
#ifdef __INTELLISENSE__ позволяет ловить именно intellisense (т.е. не запуск cl /BE /c)
Здравствуйте, Alexander G, Вы писали:
M>>Это можно как-то полечить?
AG>Самостоятельно лечить -- вряд ли.
AG>Можно попытаться изолировать и найти воркэраунд. AG>Можно зарепортить на https://developercommunity.visualstudio.com/ в надежде на скорейший фикс в течение ближайших лет.
Спс, попробую не полениться и сделать минимальный пример. Хотя — у меня проект на гитхабе, открытый (и там есть вполне себе минимальный воспроизводимый пример) — прокатит такое?
Хотя, ремарка про "скорейший фикс в течение ближайших лет" — воодушевляет
AG>Запуск 64-битной версии компилятора с недокументриованной опцией /BE и опцией /c приводит к компиляции фтронтендом EDG, который используется интеллисенсом; это позволяет ловить ошибки интеллисенса как ошибки компилятора.
AG>#ifdef __EDG__ позволяет детектить компиляцию EDG (включая и intellisence и cl /BE /c)
AG>#ifdef __INTELLISENSE__ позволяет ловить именно intellisense (т.е. не запуск cl /BE /c)
Это конечно интересно, без сарказма, но чего-то я пока не понял, как бы это мне могло помочь. Только если попробовать посмотреть, что скажет EDG.
В x86 версии компилятора CL такой фичи нет? А как определить, какой из CL запускает среда? И как ей сказать, что надо принудительно запускать x64 версию CL?
ЗЫ А про EDG — и вправду интересно. Он ещё жив? Как я понимаю, это был в своё время очень платный и очень дорогой аналог llvm/clang в своё время. Не помню, чтобы у них был свой отдельный публично доступный компилятор (если не говорить о каких-то лохматых годах), но вроде его многие компиляторо-строители использовали. По идее, clang/clangd должны бы его хорошо начать теснить, на старых дрожжях держится?
Здравствуйте, Marty, Вы писали:
M>Здравствуйте!
M>MSVC2019 — подсвечивает красной волнистой чертой вызов функции и говорит, что но матчинг. Код же замечательно компилится и запускается.
Было очень-очень давно что-то похожее. Причину точную не помню, но что-то связанное настройками проекта (возможно что лишний пробел в пути или что-то в этом роде).
Здравствуйте, Marty, Вы писали:
M>Спс, попробую не полениться и сделать минимальный пример. Хотя — у меня проект на гитхабе, открытый (и там есть вполне себе минимальный воспроизводимый пример) — прокатит такое?
Да, такое инвестигейтят тоже. Но, разумеется, чем изолированнее, тем лучше.
M>Хотя, ремарка про "скорейший фикс в течение ближайших лет" — воодушевляет
Это же всего лишь интеллисенс, поэтому вряд ли получит приоритет.
M>Это конечно интересно, без сарказма, но чего-то я пока не понял, как бы это мне могло помочь. Только если попробовать посмотреть, что скажет EDG.
Упрощает эксперименты, как мне кажется. Хотя бы позволяет скопировать полный текст ошибки по-нормальному.
M>В x86 версии компилятора CL такой фичи нет? А как определить, какой из CL запускает среда? И как ей сказать, что надо принудительно запускать x64 версию CL?
Среда запускает x64 версию для x86 кода, насколько я понимаю. Опция /BE для 32-битного тулсета не работает.
Можно запускать нативную компиляцию x64 в x64 (тулсет в Hostx64\x64) или кросс компиляцию x64 в x86 (тулсет в Hostx64\x86)
M>ЗЫ А про EDG — и вправду интересно. Он ещё жив? Как я понимаю, это был в своё время очень платный и очень дорогой аналог llvm/clang в своё время. Не помню, чтобы у них был свой отдельный публично доступный компилятор (если не говорить о каких-то лохматых годах), но вроде его многие компиляторо-строители использовали. По идее, clang/clangd должны бы его хорошо начать теснить, на старых дрожжях держится?
Я не знаю про актуальное использование EDG как полного копилятора, но есть инфа, что EDG используется как фронт-энд:
* в Intellisense MSVC
* в CUDA NVCC
* в одном из интеловских компиляторов (том, который "старый")
Это мне известно по контрибьюшину в MSVC STL.
Собственно cl /BE /c — часть тестовых матриц MSVC STL, отвечающая за компилируемость интеллисенсом.
(Скрипт, запускающий тест, при этом, пропускает cl /BE /c на x86, оставляет только на x64)
Здравствуйте, ArtDenis, Вы писали:
AD>Было очень-очень давно что-то похожее. Причину точную не помню, но что-то связанное настройками проекта (возможно что лишний пробел в пути или что-то в этом роде).
AD>Ну и классика "Rescan Solution" не помогает?
А где эту классику искать? А то я первый раз о ней слышу
Здравствуйте, ArtDenis, Вы писали:
M>>Да, есть, действительно. И да, вроде помогло
AD>Ну значит скорее всего просто что-то менялось не средствами IDE, а интеллисенс об этом не знал
Да, менялось. Я код в фаре пишу, в студии иногда разглядываю и отлаживаю. В студии стоит опция — "перезагружать изменённые извне файлы", и она перегружает их без запроса. Странно, что Intellisense это не прочухивает