In den Sprachmodi C++ 2017 und C++ 2020 unterstützt der Compiler extern-inline Funktionen (siehe auch „extern inline vs. static inline"). Diese haben eine ähnliche Problematik wie die Templates: Es muss eine eindeutige Adresse geben. Der Compiler muss die Funktion also einem Modul zuordnen.
Die extern-inline Funktionen werden ähnlich behandelt wie Template-Einheiten. Für sie werden Einträge in der Instanziierungs-Informationsdatei angelegt. Die Automatische Instanziierung weist die Funktion einem Modul zu.
Das hat zur Folge, dass die Template-Instanziierung auch ablaufen muss, wenn keine Templates verwendet werden.
Die Möglichkeit der Inline-Expansion als Optimierung bleibt bestehen (siehe „Inline-Generierung von benutzereigenen Funktionen“ (Verlauf der Optimierung)). Diese Optimierung ist in allen Modulen möglich.
Gegenüber normalen Template-Einheiten ergeben sich die folgenden Unterschiede:
- Die Pragmas
instantiate
,do_not_instantiate
undcan_instantiate
können nicht für extern-inline Funktionen genutzt werden, die keine Templates sind. - Mit dem Pragma
instantiate_inline
kann das Modul bestimmt werden, dem die Funktion zugeordnet wird. - Das implizite Inkludieren ist nicht relevant. Alle benutzten Typen müssen deklariert worden sein, wie bei nicht-inline Funktionen auch.
- Die syntaktische und semantische Prüfung erfolgt in jedem Modul, in dem die extern-inline Funktion definiert ist.
- Zur Zeit (Version 4.0B03) werden extern-inline Funktionen nicht in den ETR-Dateien berücksichtigt.