static assert с бонусом
От: Кодт Россия  
Дата: 01.02.08 17:40
Оценка: 44 (6) :)
Захотелось мне узнать sizeof(long double) у Comeau Online.
Естественно, первое поползновение —
#define static_assert(v) static char test_##__LINE__ [v ? 1 : -1]

static_assert( sizeof(long double)==10 ); // и дальше перебирать варианты

Но это как-то не очень продуктивно. Тогда вот:
template<int N> struct IsZero { virtual void foo() = 0; };
template<> struct IsZero<0> {};

#define static_assert_zero(v) static IsZero< v > test_##__LINE__

static_assert_zero( sizeof(long double) );

И за один проход вместо невменяемого "the size of an array must be greater than zero"
я получил "object of abstract class type "IsZero<12>" is not allowed".

Мораль: таким способом можно не только ловить ошибки, но и получать разную полезную информацию про них.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.