Файл карты содержит запись только для первого экземпляра функции шаблона?

Давайте предположим, что у меня есть следующая функция шаблона в файле ах

#include <iostream>

template <class T>
void foo(T arg)
{
   ...some code...
   std::cout<< arg <<std::endl;
}

И следующий код в .cpp

#include "Header.h"
#include <string>
int main(int argc, char* argv[])
{
    foo<int>(5);
    foo<double>(5.25);
    foo<std::string>("Hello World");
    return 0;
}

Когда я просматриваю файл .map, сгенерированный компоновщиком (опция /MAP (Generate Mapfile) в VS) для этого исполняемого файла, я вижу только одну запись для функции foo, которая

0001:000006f0       ??$foo@H@@YAXH@Z           004016f0 f i main.obj

Однако я предположил, что он должен содержать 3 отдельные записи для функции foo (по одной на экземпляр). Просмотр файла карты с помощью Amap показывает, что эта запись соответствует

 void foo<int>(int) 

функция. Может кто-нибудь объяснить, почему нет записей для

void foo<std::string>(std::string) 
void foo<double>(double)

функции?

Спасибо

0 ответов

Другие вопросы по тегам