Проверка во время компиляции того, что переменная подписана/без знакаC++

Программы на C++. Форум разработчиков
Anonymous
Проверка во время компиляции того, что переменная подписана/без знака

Сообщение Anonymous »

Я пытаюсь придумать способы проверки во время компиляции, является ли определенная переменная знаковой или беззнаковой. На самом деле, я довольно долго использовал следующий макрос для проверки знаковой переменной:

Код: Выделить всё

#ifdef _DEBUG
#define CHECK_SIGNED(v) if((v) == -(v)){}
#else
#define CHECK_SIGNED(v)
#endif
и тогда его пройдёт следующее:

Код: Выделить всё

INT rr = 0;
CHECK_SIGNED(rr);
при этом:

Код: Выделить всё

UINT rr = 0;
CHECK_SIGNED(rr);
сгенерирует ошибку времени компиляции:


ошибка C4146: унарный минус оператор применен к беззнаковому типу, результат
все еще без знака


Поэтому теперь я пытаюсь придумать аналогичную проверку для беззнакового типа переменная. Есть предложения?

PS. Хотя я использую VS 2017, было бы неплохо сделать его обратно совместимым со старыми стандартами C++.

Подробнее здесь: https://stackoverflow.com/questions/575 ... d-unsigned

Вернуться в «C++»