Template, Liste, Funktion
-
Okay.. ja klar, Sorry..
Was ich halt nicht verstehe ist, dass der Code eine Musterlösung von unserem Prof ist. Ich habe es 1zu1 nachprogrammiert.Die Klasse List fehlt halt und ich glaube, dass es auch 1zu1 möglich sein müsste, den Code zu kompilieren, ohne 'typename' , mit einer selbst geschriebenen Klasse.
-
Wenn Du den
operator>>()
alsfriend
innerhalb der Klasse definierst, geht es ohnetypename
.
-
@spiegelbirke2 Visual C++ frisst den Code auch ohne
typename
- trotz dem er falsch ist. Und ganz aktuelle Visual C++ Versionen spucken dir hier ebenfalls einen Fehler aus wenn du mit/permissive-
oder/Zc:twoPhase
compilierst.Und GCC und Clang werden es grundsätzlich nicht compilieren. Ausgenommen vielleicht sehr alte Versionen oder evtl. Clang im Visual C++ Kompatibilitätsmodus.
-
@hustbaer Das heißt auch bei meiner "Lösung" für mit ohne
typename
müsstetypename
hin?
-
@Swordfish Ehrlich gesagt: weiss ich nicht. Ich hab' mich auf den von @spiegelbirke2 geposteten Code bezogen. Ich schätze die Version mit
friend
dürfte OK sein. Vielleicht
-
@hustbaer sagte in Template, Liste, Funktion:
Vielleicht
Ach, diese Sprache muss man einfach lieben!
-
Naja ne das wird schon klar aus dem Standard hervorgehen. Hab das nicht nachgelesen. Es fressen dann aber alle Compiler die ich probiert habe: MSVC (auch mit
/permissive-
), GCC 8.3 und Clang 8.0.
-
Mit meinem Kommentar bezog ich mich nicht darauf daß es nirgends geschrieben steht, sondern darauf daß keine S** auf die schnelle rausfinden kann wo. *lol*
-
Naja, hab's nicht versucht, aber auf mich bezogen wirst du Recht haben. @Columbo findet das sicher in < 1 Minute
-
@hustbaer Aus [basic.lookup.unqual]:
Name lookup for a name used in the definition of a friend function defined inline in the class granting friendship shall proceed as described for lookup in member function definitions.
Und [temp.dep.type]/1:
A name refers to the current instantiation if it is ... in the definition of a primary class template or a member of a primary class template, the name of the class template followed by the template argument list of the primary template (as described below) enclosed in <> (or an equivalent template alias specialization),