2

私はユーザー定義リテラル(GCC 4.7を使用)で遊んでいます。

double operator"" _lb(long double n)
{
    return n * 0.453592; // convert pounds to kilos
}

これは、浮動小数点リテラル(eg 42.0_lb)を渡す場合は正常に機能しますが、整数リテラル(eg 42_lb)を渡そうとすると、次のエラーが発生します。

エラー:数値リテラル演算子'operator ""_lb'が見つかりません

私の定義は、(通常の関数の場合のように)_lbパラメーター間で暗黙の変換を引き起こすべきではありませんか?long double

4

1 に答える 1

4

いいえ、この場合、このような暗黙の変換は適用されません。[lex.ext] p3に従って、user-defined-intergal-literalは、リテラル演算子をunsigned long long使用するか、生のリテラル演算子(をconst char*使用する)またはリテラル演算子テンプレートによってのみ処理できます。

于 2012-12-03T10:36:02.767 に答える