Заглянул тут в вывод «objdump -C» и немало удивился: оказалось, что для различных параметров шаблона генерируются отдельные копии кода, даже если сам код абсолютно идентичный.
Довольно искусственный пример кода, демонстрирующий проблему:
#include <cstddef>
#include <ctime>
template<int I, class T>
struct V {
typedef T value_type;
};
template<class T>
struct func {
void __attribute__((noinline))
operator()(typename T::value_type& v) { v+= 1; }
};
int main() {
int i = time(NULL);
func< V<10,int> >()(i);
func< V<20,int> >()(i);
return i;
}
Есть ли хитрые флаги для gcc и/или линкера чтобы экземпляры созданные из одного шаблона при возможности не дублировались исполняемом файле?