Определяю вот такой массив:
extern struct StringPtr {
char * String;
} const __declspec (selectany) Strings [] = {
"xxxxxxxxxxxx",
};
Компилирую с ключом /Gy, в ассемблерном листинге вижу, что Strings объявлен в COMDAT.
Линкую хоть по умолчанию, хоть явно с ключом /opt:ref, в verbose-выдаче вижу:
Discarded "struct StringPtr const * const Strings" (?Strings@@3QBUStringPtr@@B) from main.obj
Смотрю EXE — там лежит строка "xxxxxxxxxxxx".
Наблюдается во всех cl/link с середины 2000-х, и до самых последних версий.
Это глюк компилятора/линкера, или я что-то делаю не так?