ULL
、などの事前定義されたリテラルf
はコンパイル時に明らかに解決されるので、疑問に思います。標準(2.14.8 [lex.ext])はこれを定義していないようですが、実行時に向かう傾向があるようです。
[2.14.8 / 2]
ユーザー定義リテラルは、リテラル演算子またはリテラル演算子テンプレート(13.5.8)の呼び出しとして扱われます。ud-suffix Xを使用した特定のユーザー定義リテラルLに対するこの呼び出しの形式を判別するために、リテラルサフィックス識別子がXであるliteral-operator-idは、非修飾名ルックアップのルールを使用してLのコンテキストでルックアップされます( 3.4.1)。このルックアップで見つかった宣言のセットをSとします。Sは空であってはならない。
(私の強調。)
13.37f
ただし、私には、これは不要なランタイムオーバーヘッドをもたらすように思われます。リテラルは、または"hello"_x
(_x
ユーザー定義リテラルはどこにあるか)のように、コンパイル時に使用可能な値にのみ追加できるためです。
次に、テンプレート化されたuser-defined-literalを取得しました。これは、標準のAFAICSでは実際には定義されません(つまり、例は示されていません。間違っていることを証明してください)。その関数はコンパイル時に何らかの形で魔法のように呼び出されますか、それともまだ実行時ですか?