C++11 標準 (正確には N3376 ドラフト)からの次の引用を考えてみましょう。
(2.14.8.5)
L がユーザー定義の文字列リテラルの場合、str を ud-sufx を除いたリテラルとし、len を str 内のコード単位の数 (つまり、終端の null 文字を除いた長さ) とします。リテラル L は、次の形式の呼び出しとして扱われます。
operator "" X (str , len )
一方、他のすべてのタイプのユーザー定義リテラル (浮動小数点、整数、文字) では、リテラル自体が文字列として渡されたとしても、長さは渡されません。例えば:
42_zzz; // calls operator "" _zzz("42") and not operator "" _zzz("42", 2)
文字列と非文字列のユーザー定義リテラルの間にこのような違いがあるのはなぜですか? それとも、実装が UD 文字列リテラルの len を渡すのはなぜですか? 長さは、他のリテラルの場合と同様に、ヌル終了によって推測できます。私は何が欠けていますか?