Как создать пользовательский литерал для целочисленного типа со знаком?

Как я узнал из этого сообщения, типы параметров, разрешенные для определенного пользователем типа литерала, следующие:

const char*
unsigned long long int
long double
char
wchar_t
char16_t
char32_t
const char*, std::size_t
const wchar_t*, std::size_t
const char16_t*, std::size_t
const char32_t*, std::size_t

Ну, единственное целое число, которое я вижу в этом списке, char, которое слишком мало. Что делать, если я хотел сделать что-то вроде этого:

str operator"" _i(int i) {
    return i*2;
}

Тогда, когда я пишу -1000_i, я ожидаю получить -2000. Как это сделать?

Ответы

Ответ 1

Нет такой вещи, как отрицательный целочисленный литерал. -1000 - это применение унарного оператора - к литералу 1000.

Тогда, когда я пишу -1000_i, я ожидаю получить -2000. Как это сделать?

Определите 1000_i таким образом, что применение унарного - дает -2000. Вы можете, например, сделать 1000_i тип структуры с пользовательским перегруженным operator-.