Est-il possible d'utiliser static_assert (ou quelque chose de similaire) avec des arguments de fonction à valeur réelle ? Ce que j'essaie de faire est le suivant. Les arguments min y max sera toujours constante dans mon application. Idéalement, j'aimerais les utiliser comme paramètres de modèle, mais ce n'est pas possible parce qu'ils ont une valeur réelle. La motivation pour utiliser static_assert est que j'aimerais obtenir un contrôle d'erreur au moment de la compilation.
template <typename counts_t, typename real_t>
real_t counts2real(counts_t c, real_t min, real_t max)
{
constexpr real_t cmin = std::numeric_limits<counts_t>::min();
constexpr real_t cmax = std::numeric_limits<counts_t>::max();
constexpr real_t cdelta = (cmax - cmin);
// ERROR: non-constant condition for static assertion.
static_assert(max > min, "max > min");
real_t delta = (max - min);
real_t p = (c - cmin) / cdelta;
return (p * delta + min);
}
int16_t x = 0;
const float min = 10.0;
const float max = 5.0;
float xf = counts2real<int16_t,float>(x, min, max);