Vorlage Freund Funktion und Rückgabetyp Abzug

8

Hinweis: Diese Frage ist sehr nahe an Rückgabetyp Abzug für in -Klasse Freund Funktionen , aber ich habe dort keine Antwort auf mein Problem gefunden.

Getestet mit clang 3.4 mit std = c ++ 1y und clang 3.5 mit std = c ++ 14 und std = c ++ 1z

Dieser Code wird kompiliert:

%Vor%

Wenn ich nun operator + außerhalb der Klasse definiere, kompiliert es nicht mehr:

%Vor%

Clang 3.4 sagt:

%Vor%

Und dann zeigt, was es glaubt, zwei verschiedene Funktionen zu sein: die Deklaration in der Klasse und die Definition außerhalb der Klasse.

Meine Frage ist: ist es ein Clang-Bug, oder nur, dass Template-Parameter für eine Friend-Funktion abgeleitet werden, was dazu führt, dass die beiden Funktionen in einigen Fällen nicht äquivalent sind? Und welche Alternative würden Sie vorschlagen: make Operator + eine Member-Funktion, oder definieren Sie Freund Operator + innerhalb der Klasse (was würde meiner Meinung nach die Klassenschnittstelle stören)?

Nur zu Ihrer Information, ich habe einen echten Anwendungsfall solchen Codes, wo ich versuche, eine Matrizenklasse von dritter Seite einzubinden, und ich brauche eine Rückgabetypabrechnung wegen der Verwendung der Ausdrucksvorlage für eine faule Auswertung.

Bearbeiten : Das Folgende funktioniert (aber die Schnittstelle bleibt immer noch ...)

%Vor%     
Bérenger 14.01.2015, 15:29
quelle

1 Antwort

1

bearbeiten: schau dir den Kommentarbereich an, es ist ein Fehler in gcc 4.8.2 und 4.9

Gcc-Fehlercode:

  

prog.cpp: 10: 61: Fehler: Nicht statisches Datenelement wurde als 'automatisch' deklariert            Operator + (MyClass const & amp; a, MyClass const & amp; b)                                                                ^ prog.cpp: In der Funktion 'int main ()': prog.cpp: 25: 15: error: no match   für 'operator +' (Operandentypen sind 'MyClass' und 'MyClass')        auto z = x + y;                  ^

    
dau_sama 14.01.2015 19:29
quelle