Вы можете сделать это с static_assert
declaration:
template<int N> void tryHarder() {
static_assert(N >= 0 && N <= 10, "N out of bounds!");
for(int i = 0; i < N; i++) {
tryOnce();
}
}
Эта функция только имеющийся так C++ 11. Если вы застряли с C++ 03, взгляните на Boost's static assert macro.
Вся эта идея - хорошие сообщения об ошибках. Если вы не заботиться о тех, или даже не может affor импульс, вы могли бы сделать что-то следующим образом:
template<bool B>
struct assert_impl {
static const int value = 1;
};
template<>
struct assert_impl<false> {
static const int value = -1;
};
template<bool B>
struct assert {
// this will attempt to declare an array of negative
// size if template parameter evaluates to false
static char arr[assert_impl<B>::value];
};
template<int N>
void tryHarder()
{
assert< N <= 10 >();
}
int main()
{
tryHarder<5>(); // fine
tryHarder<15>(); // error, size of array is negative
}
Посмотрите на [static_assert] (http://en.cppreference.com/w/cpp/language/static_assert) – juanchopanza
@juanchopanza: Это ответ. – Nawaz
Отлично! Но есть ли что-нибудь pre-C++ 11? – MciprianM