ошибка проверки времени компиляции в метапрограмме шаблона

count = max(enumerate(open(filename)))[0]

1
задан Binu 18 January 2019 в 14:57
поделиться

2 ответа

Прежде всего, приведенный выше код не является допустимым кодом 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;
};

попробуйте здесь

0
ответ дан Michael Kenzel 18 January 2019 в 14:57
поделиться

Почему бы просто не написать:

template <unsigned N, unsigned LO = 0U, unsigned HI = 99U>
struct validate : std::bool_constant< N>=LO && N<=HI >
{ /* static_assert(LO <= HI); */ };

Обратите внимание, что любое значение типа unsigned будет больше или равно 0.

0
ответ дан Daniel Langr 18 January 2019 в 14:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: