В следующей программе мы берем адрес шаблона функции, для которого нет определения.
template <typename T>
void fun(T);
int main()
{
void (*funptr)(int) = fun;
}
Меня учили, что компилятор решает создать экземпляр шаблона функции при получении его адреса, но вышеприведенная программа компилируется просто отлично (конечно, компоновщик выдаст ошибку, которую он не может найти для определения fun
). Компиляция завершится неудачно только в том случае, если мы используем явное создание экземпляра:
template <typename T>
void fun(T);
template void fun<int>(int);
int main()
{}
Означает ли это, что только компиляция второго исходного кода создает экземпляр шаблона функции? Или это тоже в первом экземпляре, но я что-то упустил?
Заранее спасибо!