Предположим, что у меня есть fileA.h, который объявляет класс classA с помощью функции шаблона SomeFunc<T>(). Эта функция реализуется непосредственно в файле заголовка (как обычно для функций шаблона). Теперь я добавляю специализированную реализацию SomeFunc() (например, для SomeFunc<int>()) в fileA.C (т.е. Не в файл заголовка).
Если я теперь звоню SomeFunc<int>() из какого-то другого кода (возможно, из другой библиотеки), вызовет ли он общую версию или специализацию?
У меня есть эта проблема прямо сейчас, когда класс и функция живут в библиотеке, которая используется двумя приложениями. И одно приложение правильно использует специализацию, в то время как другое приложение использует общую форму (что впоследствии приводит к проблемам с выполнением). Почему разница? Может ли это быть связано с параметрами компоновщика и т.д.? Это на Linux, с g++ 4.1.2.
