Warum wird ein Programm als mehrdeutig abgelehnt, das durch Überladungsauflösung aufgelöst werden könnte?

9

Das folgende Programm wird von gcc als mehrdeutig zurückgewiesen:

%Vor%

Clang lehnt das Programm aus dem gleichen Grund konsequent ab:

%Vor%

Ich bin mir nicht ganz sicher, ob ich die Suchregeln in Abschnitt 10.2 richtig verstanden habe, also gehe ich die Regeln in den folgenden Schritten durch, um die Suchmenge S (foo, A) zu berechnen:

%Vor%

Die Ergebnismenge ist eine ungültige Menge und daher ist das Programm schlecht gebildet.

Ich frage mich, warum das Programm so früh abgelehnt wird. Es sollte für den Compiler leicht sein, in diesem Fall eine Überladungsauflösung durchzuführen, da beide Funktionen identische Namen, aber unterschiedliche Signaturen haben, so dass es keine wirkliche Mehrdeutigkeit gibt. Gibt es einen technischen Grund, dass dies nicht gemacht wird, oder gibt es andere Gründe, die falsche Programme akzeptieren würden? Kennt jemand die Vernunft hinter der Entscheidung, diese Programme so früh abzulehnen?

    
Jens 22.12.2015, 14:03
quelle

1 Antwort

3

In C ++ gibt es keine bereichsübergreifende Überlastung - abgeleitete Klassenbereiche sind keine Ausnahme von dieser allgemeinen Regel .Bitte verweisen für weitere Details. Wie auch immer, Ihr Beispiel kann verbessert werden, indem Sie angeben, dass Sie beide Versionen von foo mit dem Schlüsselwort "using" verwenden möchten. Siehe folgendes Beispiel.

Beispielprogramm:

%Vor%     
SACHIN GOYAL 22.12.2015, 14:38
quelle