Wiele wczesnych kompilatorów C++ tworzyło wszystkie funkcje składowe, niezależnie od tego, czy kiedykolwiek je wywołałeś, czy nie.
Weź pod uwagę na przykład std::list
, która ma funkcję członkowską sort
. Przy obecnym, właściwie działającym kompilatorze można utworzyć instancję list
nad typem, który nie obsługuje porównania. Jeśli spróbujesz użyć list::sort
, to się nie powiedzie, ponieważ nie obsługujesz porównywania. Tak długo, jak nie wywołasz tej listy pod numerem sort
, wszystko będzie w porządku, ponieważ list<T>::sort
nie zostanie utworzone, chyba że zadzwonisz.
W przypadku starszych, źle działających kompilatorów próba utworzenia list<T>
spowodowała, że utworzono instancję list<T>::sort
, mimo że nigdy jej nie używano. Istnienie list::sort
oznaczało, że musisz wdrożyć <
dla T
, aby utworzyć list<T>
, nawet jeśli w rzeczywistości nigdy nie używałeś sort
na liście tego typu.
Dotyczy funkcji członka. Ale mogę sobie wyobrazić, jeśli wywołasz statyczną metodę szablonu klasy, członkowie danych również nie muszą być tworzone. – juanchopanza