Это артефакт того, как Compiler Explorer (godbolt.org) представляет вывод по умолчанию. Отключите параметр .LX0
в области вывода, и он представит ожидаемый вывод.
Проводник компилятора предполагает, что вывод является сборкой, и обрабатывает HelloWorld::
как неиспользуемую метку, которая удаляется .LX0
option.
Во втором примере HelloWorld::
не удаляется, потому что он появляется позже в выводе, создавая впечатление, что используется «метка», и поскольку .LX0
фильтрует только неиспользуемые метки, он не удалит его.
С MSV C этого не происходит, поскольку вывод MSV C /E
не представлен на панели сборки.
В общем если вы хотите увидеть полный нефильтрованный вывод компилятора, снимите все флажки на панели сборки. (Я не знаю, происходит ли какая-либо другая обработка, которая не может быть отключена.)
См. Также эту проблему обозревателя компиляторов , связанную с проблемами представления с опцией -E
.