Rainer Grimm hat am 10. November 2017 weitere Regeln der C++ Core Guidelines zur Überladung erläutert. Im Mittelpunkt stehen unter anderem Anpassungspunkte mit using und die Platzierung eigener Operatoren. Das betrifft die Gestaltung generischer Bibliotheken, nicht eine neu erschienene Sprachversion.
using std::swap lässt eine passende eigene Funktion zu
Die historische Regel C.165 beschreibt das Muster using std::swap; swap(a, b);. Der unqualifizierte Aufruf berücksichtigt über Argument-Dependent Lookup auch passende Funktionen im Namensraum der Argumenttypen. Ohne eine passende eigene Variante bleibt die Standardfunktion als Kandidat verfügbar. Ein direkter Aufruf von std::swap(a, b) nutzt diesen ADL-Anpassungspunkt dagegen nicht.
C.168 empfiehlt deshalb, überladene Operatoren im Namensraum ihrer Operanden zu definieren. Die Namenssuche erfolgt beim Übersetzen, nicht durch die C++-Laufzeit. Ein eigener C++14-Test mit einem speziellen swap und einem Ganzzahl-Fallback bestätigt die beiden Aufrufwege.
explicit operator bool erlaubt weiterhin Bedingungen
Grimms Konvertierungsbeispiel zeigt ein anderes Risiko: Ein impliziter operator bool kann weitere Umwandlungen für arithmetische Ausdrücke ermöglichen. Mit explicit bleiben kontextuelle bool-Prüfungen wie eine Bedingung zulässig, eine implizite Übernahme in int dagegen nicht. Auch diese Unterscheidung wurde mit einem positiven und einem erwartbar scheiternden Compile-Test geprüft.
Die zuvor erläuterten Regeln für symmetrische Operatoren und klare Semantik behandeln die erlaubten Operandfolgen. Hier geht es zusätzlich darum, welche Funktionen der Compiler überhaupt findet und welche Umwandlungen eine Schnittstelle unbeabsichtigt zulässt.
Archivhinweis: Der Beitrag behandelt Grimms Folgeartikel vom November 2017 und den dazu passenden archivierten Leitlinienstand. Spätere Sprach- und Bibliothekserweiterungen sind nicht vorausgesetzt.

