Для моего класса C++ я хочу скомпилировать без включения путей по умолчанию. Таким образом, если я забуду включить в файл, который использует assert, компилятор выдаст ошибку. Прямо сейчас мой компилятор автоматически включает assert.h, но компилятор автоматических тестовых систем курса выдаст ошибку, потому что он не включает автоматическое включение, что часто вызывает путаницу.
В этом потоке показано, как вывести список включаемых каталогов по умолчанию: Какие каталоги включения по умолчанию в GCC?
Стандартные заголовки могут включать (а могут и не включать) другие стандартные заголовки. Вы не можете это контролировать.
Если вы всегда включаете правильные заголовки для вещей, которые вы используете, даже если ваш код может компилироваться без них в вашем конкретном компиляторе, у вас должно быть все в порядке со всеми компиляторами. Есть некоторые исключения, когда разные платформы не используют одни и те же заголовки, но для стандартных вещей это работает.





Думаю, вы смешиваете хотя бы концепции 3. Есть пути включения по умолчанию. Они не приводят к включению какого-либо файла. Есть принудительное включение. Они могут привести к включению assert.h, но вы должны явно заставить компилятор сделать это.
Наконец, любой заголовок C++ может косвенно включать assert.h, и именно это с вами происходит - насколько я могу судить, не видя реального кода.
«Прямо сейчас мой компилятор автоматически включает assert.h» - вы в этом уверены? Я думаю, вы можете запутаться в том, что по умолчанию включает пути - это просто каталоги, в которых выполняется поиск указанных вами заголовков. По умолчанию заголовки не включаются.