Должны ли целочисленные значения передаваться пользовательским литералам с плавающей запятой?

Я играю с пользовательскими литералами (с GCC 4.7).

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

Это прекрасно работает при передаче литерала с плавающей запятой (например, 42.0_lbОднако, когда я пытаюсь передать целочисленный литерал (например, 42_lb) Я получаю следующую ошибку:

ошибка: невозможно найти числовой литеральный оператор ‘operator «» _lb «

Не должно ли мое определение _lb вызвать неявное преобразование между параметром в long double (как было бы с обычными функциями)?

2

Решение

Нет, такое неявное преобразование не применимо в этом случае. Согласно [lex.ext] p3, определяемый пользователем intergal-literal может обрабатываться только литеральным оператором, принимающим unsigned long long или необработанным литеральным оператором (который занимает const char*) или шаблон буквального оператора.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]