Was ist der Umfang eines benutzerdefinierten Literals?

8

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?

    
M. Sadeq H. E. 22.08.2014, 17:08
quelle

1 Antwort

12

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-suffix X zu ermitteln, muss die literal-operator-id , deren Literal-Suffix-ID X wird im Kontext von L 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.

%Vor%

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.

    
ecatmur 22.08.2014, 17:33
quelle