Не знаю даже куда это больше подходит, сюда или в этюды..
Вот надо было мне проверить перед арифметикой над переменной ,что переменная не указатель, иначе — ошибка компиляции. Всё бы хорошо, только язык не плюсы — ни шаблонов тебе, ни перегрузки функций, да ещё и переменные объявлять нужно в начале блока функции. Вообщем нашёл решение не хуже шаблонов. Показалось интересным.
void dummy(type var, type var2)
{
STATIC_ASSERT_NO_POINTER_VALUE(var); /* all or nothing */
type res = var-var2; /* valid if not pointer arithmetic */
/* ... */
}
#define STATIC_ASSERT_NO_POINTER_VALUE(var) ...
Во что надо задефайнить макрос?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]