[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-ке?
Re: [VC8][VC9][BUG] Шаблонная функция не инстанцируется
От: Alexander G Украина  
Дата: 01.03.10 11:54
Оценка:
Здравствуйте, Were, Вы писали:

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


Не воспроизводится на VC8 SP1, VC10 RC.
Русский военный корабль идёт ко дну!
Re[2]: [VC8][VC9][BUG] Шаблонная функция не инстанцируется
От: Were  
Дата: 01.03.10 12:06
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, Were, Вы писали:


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


AG>Не воспроизводится на VC8 SP1, VC10 RC.


Да, с 8-кой это я поторопился.
Re[3]: [VC8][VC9][BUG] Шаблонная функция не инстанцируется
От: barmafon  
Дата: 01.03.10 12:35
Оценка:
Здравствуйте, Were, Вы писали:

W>Да, с 8-кой это я поторопился.


Не скажи. На моей 8-ке SP1 (Compiler Version 14.00.50727.762, Linker Version 8.00.50727.762) очень даже воспроизводится. Может, апдейт KB932232 влияет?
Re[4]: [VC8][VC9][BUG] Шаблонная функция не инстанцируется
От: Were  
Дата: 01.03.10 13:02
Оценка:
Здравствуйте, barmafon, Вы писали:

B>Здравствуйте, Were, Вы писали:


W>>Да, с 8-кой это я поторопился.


B>Не скажи. На моей 8-ке SP1 (Compiler Version 14.00.50727.762, Linker Version 8.00.50727.762) очень даже воспроизводится. Может, апдейт KB932232 влияет?


У меня стоит KB926601.
Re: [VC8][VC9][BUG] Шаблонная функция не инстанцируется
От: Кодт Россия  
Дата: 01.03.10 13:53
Оценка:
Здравствуйте, Were, Вы писали:

Ай как прикольно! Если (f) перетащить в деструктор — всё равно не воплощается!
Но если сделать не d(new...) а delete(new...) — то воплощается.

Шайтанама, кто бы объяснил логику?

(VC8sp1, 14.00.50727.762)
Перекуём баги на фичи!
Re[2]: [VC8][VC9][BUG] Шаблонная функция не инстанцируется
От: Were  
Дата: 01.03.10 14:15
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Were, Вы писали:


К>Ай как прикольно! Если (f) перетащить в деструктор — всё равно не воплощается!

К>Но если сделать не d(new...) а delete(new...) — то воплощается.

К>Шайтанама, кто бы объяснил логику?


К>(VC8sp1, 14.00.50727.762)


Кстати, d в изначальном коде — это boost::checked_delete, который используется умными указателями. Без него бы все работало нормально.
Re[3]: [VC8][VC9][BUG] Шаблонная функция не инстанцируется
От: Кодт Россия  
Дата: 01.03.10 14:45
Оценка:
Здравствуйте, Were, Вы писали:

W>Кстати, d в изначальном коде — это boost::checked_delete, который используется умными указателями. Без него бы все работало нормально.


Я догадался, где ты граблю отхватил
Перекуём баги на фичи!
Re[2]: [VC8][VC9][BUG] Шаблонная функция не инстанцируется
От: rus blood Россия  
Дата: 01.03.10 18:20
Оценка:
Здравствуйте, Кодт, Вы писали:

К>(VC8sp1, 14.00.50727.762)


Ничего не проявляется.
Ни в конструкторе, ни в деструкторе, ни с delete-ом, ни с функтором.

Версия та же, professional edition.
fast speed, ltcg.
В ассемблере вызовы new и delete.

Имею скафандр — готов путешествовать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.