Здравствуйте, Кодт, Вы писали:
К>К>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".
К>Мораль: таким способом можно не только ловить ошибки, но и получать разную полезную информацию про них.
Это и так можно делать, способов думаю уйма.
template<int N> class IsZero { IsZero(); } ;
IsZero<sizeof(long double)> check;
"1.cpp", line 3: error: "IsZero<N>::IsZero() [with N=8]" (declared at line 1)
is inaccessible
IsZero<sizeof(long double)> check;
Я вот, к примеру, использовал его
здесьАвтор: Vain
Дата: 02.02.07
.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]