У меня есть глобальный список указателей на функции. Этот список должен быть заполнен при запуске. Порядок не важен, и нет никаких зависимостей, которые могли бы усложнить статическую инициализацию. Чтобы облегчить это, я написал класс, который добавляет одну запись к этому списку в своем конструкторе и при необходимости разбрасывает глобальные экземпляры этого класса с помощью макроса. Одной из основных целей этого подхода является устранение необходимости явной ссылки на каждый экземпляр этого класса извне, вместо этого позволяя каждому файлу, который должен что-то зарегистрировать в списке, сделать это независимо. Красиво и чисто.
Однако при размещении этих объектов в статической библиотеке компоновщик отбрасывает (или, скорее, никогда не связывает) эти блоки, поскольку на них явно не ссылается ни один код. Явная ссылка на символы в единицах компиляции будет контрпродуктивной, прямо противоречащей одной из основных целей подхода. По той же причине / INCLUDE не является приемлемым параметром, и / OPT: NOREF фактически не связан с этой проблемой.
Для Metrowerks есть директива __declspec, в GCC - -force_load, но я не могу найти эквивалент для MSVC.