Obtenir la valeur min / max d’un tableau statique constexpr au moment de la compilation

Disons que j’ai un tableau d’entiers défini comme ça:

static constexpr int IntArray[] = {1, 5, 10, 12, 17}; 

Y a-t-il un moyen d’obtenir la valeur minimale ou maximale au moment de la compilation?

Allons de l’avant avec la solution C ++ 17 pour les futurs chercheurs:

 constexpr int IntArray[] = {1, 5, 10, 12, 17}; constexpr int min = *std::min_element(std::begin(IntArray), std::end(IntArray)); static_assert(min == 1); 

C ++ 11 est plus difficile avec les fonctions constexpr , nous devons donc déployer un algorithme récursif. Celui-ci est simple, linéaire:

 template  constexpr T &constexpr_min(T &a, T &b) { return a > b ? b : a; } template  constexpr T &arrayMin_impl(T *begin, T *end) { return begin + 1 == end ? *begin : constexpr_min(*begin, arrayMin_impl(begin + 1, end)); } template  constexpr T &arrayMin(T(&arr)[N]) { return arrayMin_impl(arr, arr + N); } constexpr int IntArray[] = {1, 5, 10, 12, 17}; constexpr int min = arrayMin(IntArray); 

Voir en direct sur Coliru