runewalsh, спокойной ночи.
Я думаю надо внимательно читать вопрос, а не писать явные ответы, которые не нужны.
Специально, для тех кто не понял, что я хочу, постараюсь расписать.
Предложенный
runewalsh код, не решит проблемы, если я захочу "сломать" код. Используя функцию для вызова, с переменной которая должна быть в определённом диапазоне (смотрим код, что писал я), найдётся человек, который захочет в эту функцию отправить совершенно другое значение окромя предложенных вариантов (допустим поставит просто число 4, а не какую-то переменную). Или добавит свою переменную/константу, которые будут больше нужного значения.
Результат: мы получим ошибку, если мы не будем проверять этот диапазон в коде.
Чего хотел я? Я хотел, чтоб пользователь использовал переменные/константы, только в определённом диапазоне, и при выходе из диапазона, чтоб код не компилировался и выдавал ошибку, ещё на стадии компиляции, а не на стадии работы приложения (что произойдёт, когда в функцию попадёт значение вне диапазона).
По сути, на это можно было бы вообще "забить", если бы библиотека не предназначалась для динамического использования. Мы скомпилируем DLL/SO и будем получать вылет из программы, и вероятнее всего вообще без всяких предупреждений.
Решением может быть предварительная компиляция приложения и проверка есть такие места или нет. Либо при создании динамической библиотеки, вставлять дополнительные проверки диапазона (что правильно).
Но я то хочу, чтоб пользователь и не мог сделать этот "баг" и чтоб проверок не было (чтоб они были предварительными).
Окончательно получаем, либо пишем все проверки диапазонов, либо пишем дополнительный компилятор, который будет делать эти проверки по обязаловке...