Betrachten Sie diese zwei:
%Vor% Das x
Literal ist zweimal definiert, aber eine davon ist in namespace X1
definiert, während eine andere in namespace X2
definiert ist.
Kann dieser Code nach dem C ++ - Standard kompiliert werden?
Ein benutzerdefiniertes Literal wird als Aufruf von operator ""
X
(...)
behandelt, wobei X
ein Bezeichner ist (z. B. _x
) und ...
hängt von der Form des benutzerdefinierten Literals ab. Die Suche nach dem geeigneten benutzerdefinierten Literaloperator erfolgt dann gemäß den üblichen Regeln für die uneingeschränkte Suche; [lex.ext] :
2 - Ein benutzerdefiniertes Literal wird als Aufruf für einen Literaloperator oder eine literale Operatorvorlage (13.5.8) behandelt. Um die Form dieses Aufrufs für ein gegebenes benutzerdefiniertes Literal
L
mit ud-suffixX
zu ermitteln, muss die literal-operator-id, deren Literal-Suffix-ID X
wird im Kontext vonL
nach den Regeln für die Suche nach nicht qualifizierten Namen (3.4.1) gesucht [...]
Die Definitionen des _x
Literals stehen nur dann in Konflikt, wenn beide Definitionen für eine uneingeschränkte Suche durch eine using
oder using namespace
Deklaration oder durch Eingabe eines der beiden Namespaces verfügbar gemacht werden; der Konflikt ist nur dann problematisch, wenn tatsächlich ein Aufruf an den unqualifizierten Operator erfolgt.
Es wäre auch in Ordnung, wenn die _x
verschiedene Arten von benutzerdefinierten Literaloperatoren wären, z. Wenn einer ein Ganzzahl-Literal-Operator und der andere ein Gleitkomma-Literal-Operator wäre.
Tags und Links c++ c++11 user-defined-literals