Генерация кода на С++ для кода, не зависящего от шаблона

Учитывая следующий код:

template<typename T>
struct A
{
    void f(){...}

    friend T;
};

template<typename T>
struct B
{
    void f(T){...}//code depends on T
    void g(){...}//code doesn't depends on T
}

Как видите, "код" в struct A не зависит от T. Будет ли компилятор генерировать другой код в последнем двоичном файле для каждого T, используемого для создания экземпляра A?

Тот же вопрос для функции B::g(), будет ли компилятор использовать одну и ту же функцию для всех экземпляров B<T>, когда это возможно, например this не используется в g(), поэтому не зависит от T? Имеет ли стандарт какой-либо спецификации для этого случая?

Ответ 1

Если вы хотите быть уверенным в том, что генерирует компилятор, почему бы не написать структуру без шаблона, реализующую код, который не зависит от T, а затем вывести свой шаблон из не-шаблона? Вы получаете одну копию кода без шаблона, который наследует каждый экземпляр шаблона.

По крайней мере, это то, что я делал в прошлом, когда обнаружил, что экземпляр шаблона делал мои скомпилированные объекты очень большими.