Re[12]: Вопрос знатокам
От: kov_serg Россия  
Дата: 03.04.23 22:34
Оценка:
Здравствуйте, rg45, Вы писали:


R>Если собрать этот проект под msvc, то будет работать в точности как ты хочешь. Но потом кто-то решает, что нужно перенести определение основного шаблона функции f из separate.cpp в header.h. При этом специализация f<int> остается в separate.cpp и в точке использования в fi по-прежнему не видна. Должно измениться поведение программы после такого перенесения или нет?

Так много вариантов есть всё переломать. Это один из них. Тут ситуация я так понял проще.
template<class T>void f(T); // заявляем что есть скоро будетет такой дефолтный метод

inline void fi(int x) { f(x); } // используем дефолтную реализацию f<int> пофиг что её пока нет, вруг ниже есть

template<class T>void f(T) {} // и тут фигакс вот он. теперь ок. но если мы его не объявим ... то ub (ну вы вкурсе програмист сам дурак по стандарту во всех спорных ситуациях)

Проблемма в том что дефолтный f(T) может быть определён позже и отсюда вся эта лажа и вытекает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.