In C ++ 5.1.1 / 3 [expr.prim.general] heißt es:
Der Typ und die Wertekategorie [von
this
] werden innerhalb einer statischen Elementfunktion definiert.
Was bedeutet das? Wie ist es relevant?
Beachten Sie, dass:
this
darf nicht in der Deklaration einer statischen Elementfunktion erscheinen
c++
c++11
language-lawyer
Andrew Tomazos
quelle
quelle
Antworten:
Die Sprache in der Norm kann auf n3282 zurückgeführt werden , was eine Lösung für die Fehler 1207 und 1017 darstellt . Insbesondere erscheint die Sprache in der vorgeschlagenen Lösung für den Mangel 1207 und sollte daher im Kontext der Norm betrachtet werden, wie sie zum Zeitpunkt der Behebung des Mangels bestand. Zu dieser Zeit gab es einige Bedenken
*this
hinsichtlich des Umschreibens von ID-Ausdrücken in Mitgliedszugriffsausdrücke unter Verwendung von (9.3.1p3), insbesondere im Zusammenhang mit Deklarationen vom Typ Trailing-Return (siehe Ausgabe 945 ).Wenn wir die vorgeschlagene Lösung für den Fehler 1207 mit der letztendlichen Sprache in n3282 und anschließend im Standard vergleichen, gibt es einen signifikanten Unterschied zu 9.3.1p3:
Fehler 1207:
n3282 und C ++ 11:
Es ist offensichtlich, dass die vorgeschlagene Lösung zum Defekt 1207 die Überzeugung enthielt, dass ID-Ausdrücke (für ein statisches Element) innerhalb einer statischen Elementfunktion in Elementzugriffsausdrücke umgewandelt werden
*this
müssten und daher Zugriff auf die Typ- und Wertkategorie von benötigen würdenthis
. Zum Zeitpunkt der Erstellung von n3282 war dies zugunsten der Transformation der qualifizierten ID (ebenfalls 9.3.1p3) behoben worden, die nicht erforderlich istthis
, aber die Sprache in 5.1.1p3 blieb unverändert.Ich würde empfehlen, dieses Problem in der Newsgroup zur Diskussion über C ++ - Standards anzusprechen. Möglicherweise kann die Sprache der Überreste redaktionell entfernt werden.
quelle