Вероятно, компилятор не устраняет это. Рассмотрим следующий пример:
template<size_t CAPACITY>
class MyVector {
...
public:
bool empty() const { static int i = CAPACITY; return ...; }
};
В приведенном выше примере вы можете видеть, что каждый MyVector<N>::empty()
должен быть уникальным, потому что static int i
должен быть эксклюзивным для функции. Даже если static int
отсутствует, компилятор всегда будет предполагать его возможность. Таким образом, если будет сгенерирована копия empty()
, она будет сгенерирована для всех версий.
Я отвечаю теоретически. Не знаю, есть ли у компилятора какая-то практическая техника оптимизации, которая бы преодолела такие вещи.
Однако, если ваш MyVector
выглядит так:
template<size_t CAPACITY, typename T>
class MyVector : public vector<T>
{
// using vector<T>::empty;
};
Тогда будет сгенерирована только одна копия.