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


R>Мне кажется, что сейчас твое внимание сконцентрировано на конкретном случае и это мешает тебе рассмотреть другие возможные варианты. Допустим, все реализовано как ты хочешь: в точке использования компилятор видит только лишь объявление основного шаблона и шьет такой код, который позволяет линкеру подшить нужную специализацию в точку вызова.


R>Но что если после этого программист решает переместить определение основного шаблона в заголовок? Тогда, после обработки сопроцессором всех директив компилятор получит такой код:


R>
R>template<class T>
R>void f(T t)
R>{
R>  // Do smth with t
R>}

R>void fi(int x)
R>{
R>  f(x);
R>}
R>

Вот когда он это сделает то ситуация уже другая. Тут есть что инстанцировать. До этого было только объявление без дефолтной реализации, вообще без какой либо реализации совсем.

R>Как в точке вызова компилятор должен понять, что здесь ему не нужно инстанцировать основной шаблон? Как быть с неявным инстанцированием, которое обеспечивает именно компилятор — отменяем?

В предыдущем варианте небыло ни строчки про то что надо что-либо инстанцировать, только объявление.

R>Второй момент: что если это не int, а какой-то сложный тип (например, использующий наследование) под который подходят сразу несколько специализаций, которые к тому же и не видны в данной точке? Что у нас с будет с overload resolution в твоем подходе? Не перекладывать же эту работу на линкер?

В чем собственно разница? Всё должно работать единообразно, но это не про стандарт c++
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.