ユーザー定義リテラルは、 whereは識別子 (たとえば、)の呼び出しとして扱われ、ユーザー定義リテラルの形式によって異なります。次に、適切なユーザー定義リテラル演算子の検索が、非修飾検索の通常の規則に従って続行されます。[lex.ext] :operator ""
X
(...)
X
_x
...
2 -ユーザー定義リテラルは、リテラル演算子またはリテラル演算子テンプレート (13.5.8) の呼び出しとして扱われます。ud-suffixを持つ特定の user-defined-literalL
のこの呼び出しの形式を決定するために、リテラル サフィックス識別子が であるliteral-operator-id が、非修飾名検索の規則を使用するコンテキストで検索されます (3.4.1)。 . [...]X
X
L
リテラルの定義が競合するのは、 or宣言またはいずれかの名前空間に入ること_x
によって、両方の定義が非修飾ルックアップに使用できるようになっている場合のみです。競合は、修飾されていない演算子への呼び出しが実際に行われた場合にのみ問題になります。using
using namespace
{ using namespace X1; auto o = 5_x; } // OK; o is of type A
{ using namespace X2; auto o = 5_x; } // OK; o is of type B
{ using namespace X1; using namespace X2; } // OK; operator "" _x is not used
{ using namespace X1; using namespace X2; auto o = 5_x; } // ambiguous
_x
たとえば、一方が整数リテラル演算子で、もう一方が浮動小数点リテラル演算子である場合など、異なるタイプのユーザー定義リテラル演算子であっても問題ありません。