[VC8][VC9][BUG] Шаблонная функция не инстанцируется
От: Were  
Дата: 01.03.10 11:47
Оценка: 39 (2)
Сделал выжимку из кода, на которой повторяется баг:

template <typename T>
    T f(){ return T();}

template <int(*f)()>
    struct H
{
    H()
    {
        //(f); // Помогает компилятору инстанцировать функцию.
    }
    ~H()
    {
        f();
    }
};

template<class T> 
    void d(T * x)
{
    delete x;
}

int main()
{
    d(new H<&f>);
    return 0;
}


Этот код вызывает ошибку линкера

error LNK2019: unresolved external symbol "int __cdecl f<int>(void)" (??$f@H@@YAHXZ) referenced in function "public: __thiscall H<int,&int __cdecl f<int>(void)>::~H<int,&int __cdecl f<int>(void)>(void)" (??1?$H@H$1??$f@H@@YAHXZ@@QAE@XZ)


Причем 6-ка собирает его нормально, без ошибок. Может кто-нибудь проверить, пофиксили-ли в 10-ке?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.