boost/static_assert.hpp
?У меня вот такой:
template <bool> struct STATIC_ASSERTION_FAILURE;
template <> struct STATIC_ASSERTION_FAILURE<true> {};
#define STATIC_CHECK(x) sizeof(STATIC_ASSERTION_FAILURE< (bool)(x) >)
Работает приемлемо сносно:int main() {
STATIC_CHECK(sizeof(int) < sizeof(char));
return 0;
}
#define COMPILE_TIME_ASSERT(x) \
ОтветитьУдалитьvoid __cta_proto__(int __cta_foo__[(x) ? 1 : -1])
Может использоваться и на "plain C"
Александреску? Это красиво...
ОтветитьУдалитьКакой именно от Александреску? темплетный или на C?
ОтветитьУдалитьКогда я писал комментарий я имел ввиду решение с шаблонами. Я посмотрел в книгу - там оба решения приводятся одно за других.
ОтветитьУдалитьВ комментарии решения на С упоминается сторонняя публикация, кажется вот это http://ksvanhorn.com/Articles/ctassert.html . То, что есть в статье Александреску свёл к решению такому же, что и привёл Qehgt.
Ну а решение с шаблонами от Александреску, конечно же :).
#define CASSERT(COND) typedef char __AP_COMM_ASSERT[(COND) ? 1 : -1]
ОтветитьУдалить