7

Wenn die Zeile mitSollte ein using-Befehl bei Verwendung einer reservierten Kennung eine Warnung ausgeben?

using std::literals::chrono_literals::operator""s; 

in g ++ 6.3.0, gibt der Compiler eine Warnung besagt:

Warnung: Literaloperator durch nicht voran Suffixe '_' für zukünftige Standardisierung reserviert sind

Eine ähnliche Warnung wird auch in MSVS ausgegeben. Clang 3.8.0 gibt jedoch keine solche Warnung aus.

Da operator""s durch den Standard für die Chronobibliothek definiert ist, sollte dies nicht eine Warnung ausgeben, da wir nur den Namen importieren und nicht definieren?

+2

Warnungen sind, sofern sie nicht obligatorisch sind, immer etwas subjektiv. Ich stimme Ihnen hier zu, aber das ist nur eine gemeinsame Meinung. – MSalters

Antwort

2

Argumentieren, ist der Wortlaut klar genug auf dieser — [over.literal]/1:

Einige wörtliche Nachsilbe Identifikatoren sind für zukünftige Standardisierung reserviert; siehe 17.6.4.3.5. Eine Deklaration , deren Literal-Operator-ID ein solches Literalsuffix Bezeichner verwendet, ist schlecht gebildet; keine Diagnose erforderlich.

Dies kann als Hinweis auf (UDL Operator) Erklärungen "name", das interpretiert wird, ist eine literal-Operator-ID — die natürlich Ihren Fall nicht qualifiziert, da literal-Operator-ID s sind ausgeschlossen . Gleiches gilt für [reserved.names]/2, wobei der “ Kontext ” s Deklarationen von benutzerdefinierten literalen Operatoren sind.

+0

Keine Deklaration "direkt" enthält eine * Literal-Operator-ID *, durch dieses Argument. Dieses Nonterminal wird nur an zwei Stellen verwendet (* Template-ID * und * Unqualified-ID *). –

+0

@ T.C. Nein, mein Argument war nicht Produktion, sondern Gleichwertigkeit. Die Deklaration nennt keine * literal-operator-id *. – Columbo

+0

Nun, 'operator" "s' * ist * eine * literal-operator-id *, also bin ich mir nicht sicher, ob ich das Argument bekomme. –

Verwandte Themen