Коротко — это не ошибка компилятора, а недопонимание редактора (IntelliSense / language service). MSVC-компилятор в современных VS уже умеет модули C++20 и проект может собираться и запускаться, а фоновый парсер редактора ещё может не понимать модульный код и подчёркивать импортированные идентификаторы как «не определённые».
Что можно сделать (пошагово):
1. Обновите Visual Studio
- Модульность в VS развивалась несколько версий; берите последнюю версию VS 2022 с последними обновлениями — баги поддержки модулей в IntelliSense там исправлены.
2. Установите стандарт C++20 / latest
- Project Properties → C/C++ → Language → C++ Language Standard = ISO C++20 (/std:c++20) или /std:c++latest.
3. Убедитесь, что используется современный toolset MSVC
- Project Properties → General → Platform Toolset = v143 (или более новый).
4. Правильно пометьте файлы модульных единиц
- Если вы используете расширения (.ixx, .cppm, .mpp и т.п.), Visual Studio иногда не распознаёт их автоматически. В Solution Explorer правой кнопкой → Properties (для конкретного файла) → General → Item Type — выберите "C/C++ Module Interface Unit" (или "C/C++ Compiler", если такого пункта нет).
- Для интерфейсных модулей (module interface unit) важно, чтобы проект их видел как модульный интерфейс, тогда VS будет корректно строить зависимость.
5. Включите поддержку модулей при необходимости (старые версии)
- В старых версиях нужно было включать экспериментальную опцию: C/C++ → Language → Enable Modules = Yes (/experimental:module). В новых версиях это обычно уже не требуется.
6. Очистите/пересоздайте базу IntelliSense
- Закройте VS, удалите папку .vs в каталоге решения (и, при необходимости, файлы .VC.db/.sdf), откройте решение и сделайте Rebuild. Это заставит IntelliSense пересканировать проект.
7. Постройте проект
- Сделайте полный билд — некоторые артефакты модулей (.ifc и т.п.) должны появиться, и это помогает редактору корректно разрешать импорты.
8. Если всё ещё подчёркивает
- Проверьте, что пути к модульным интерфейсам и include/папки указаны корректно.
- В крайнем случае временно отключите подчёркивания (Tools → Options → Text Editor → C/C++ → Advanced → Diagnostic/IntelliSense options) или используйте внешний инструмент (clangd в VS Code), если вам критична подсветка.
Почему это происходит (коротко)
- IntelliSense — отдельный компонент, он использует собственный парсер/сервис и может отставать по функционалу от компилятора. Поддержка модулей была добавлена постепенно и зависит от версии VS и настроек проекта.
Если хотите, укажите:
- версию Visual Studio (например 16.x/17.x),
- расширения файлов модулей (.ixx/.cppm/...),
- какие свойства проекта уже выставлены,
и я напишу конкретные шаги под вашу конфигурацию.