Я играю с пользовательскими литералами (с 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
(как было бы с обычными функциями)?
Нет, такое неявное преобразование не применимо в этом случае. Согласно [lex.ext] p3, определяемый пользователем intergal-literal может обрабатываться только литеральным оператором, принимающим unsigned long long
или необработанным литеральным оператором (который занимает const char*
) или шаблон буквального оператора.
Других решений пока нет …