У меня есть макрос, который является просто постоянным значением:
#define THREAD_AT_DEPTH 13
Я хочу выдать ошибку во время компиляции, если я установлю это значение на что-то даже.
#if (THREAD_AT_DEPTH % 2) == 0
#error THREAD_AT_DEPTH must be odd
#endif
К несчастью, THREAD_AT_DEPTH % 2
не оценивается во время компиляции, и #error
всегда в силе. Если я изменю THREAD_AT_DEPTH
в 13
мой #if
Директива работает как задумано.
Есть ли способ, чтобы правильно определить определенные макросы?
РЕДАКТИРОВАТЬ: этот вопрос не соответствует моему коду. Выше работает как ожидалось. Я не понял, что код, который не работал, использует
const int THREAD_AT_DEPTH = 13;
//...
#if (THREAD_AT_DEPTH % 2) == 1
//...
Когда я изменил это на
#define THREAD_AT_DEPTH 13
мой #if
Директива сработала как положено.
Теперь я не уверен, должен ли я оставить этот вопрос здесь или удалить его.
В C ++ 11 вы можете использовать static_assert за это.
Других решений пока нет …