Прежде всего, приведенный выше код не является допустимым кодом C ++. Синтаксис, который вы используете для явной специализации шаблонов, неверен (и в конце вы пропускаете точку с запятой). Кроме того: std::min<0U,N>
и std::max<N,99U>
являются функциями, а не вызовами функций. Вы, вероятно, хотели написать:
template<unsigned N> struct valid {static const unsigned value = 0; };
template<> struct valid<0U> {static const unsigned value = 1; };
template<> struct valid<99U> {static const unsigned value = 1; };
template<unsigned N> struct validate
{
static const unsigned value = valid< std::min(0U,N) >::value *
valid< std::max(N,99U) >::value;
};
Почему бы просто не написать:
template <unsigned N, unsigned LO = 0U, unsigned HI = 99U>
struct validate : std::bool_constant< N>=LO && N<=HI >
{ /* static_assert(LO <= HI); */ };
Обратите внимание, что любое значение типа unsigned
будет больше или равно 0.