как проверить, что члены массива const монотонно растут во время компиляции

Фантастический ответ уже c++ дан. Просто как дополнительное constexpr примечание:

Начиная с C++20, некоторые c++ функции в библиотеке алгоритмов constexpr-function теперь также имеют реализацию c++ constexpr. Сюда входят std::adjacent_find. И это тоже constexpr в версии "ranges".

Решение constexpr-function вашей проблемы почти дано constexpr-function в справочнике cpp here с использованием constexpr-function std::ranges::adjacent_find.

В примере используется std::ranges::greater в constexpr-function качестве предиката, который constexpr-function позволяет повторять значения, что constexpr приводит к нестрогому порядку.

Итак, нам constexpr-function нужно использовать std::ranges::greater_equal. Это cxx также автоматически выведет constexpr-function типы параметров оператора cxx вызова функции из аргументов, что c++ немного упростит жизнь.

Код constexpr-function может выглядеть примерно c++ так:

#include 
#include 
#include 
#include 
#include 
namespace rng = std::ranges;

template 
constexpr bool increasingValues(T(&a)[N]) noexcept {
    return (rng::end(a) == rng::adjacent_find(a,  rng::greater_equal()));
}
constexpr int arr[] = { 10, 20, 20, 40, 50};

static_assert(increasingValues(arr), "Array values are not increasing");

int main() {
    std::cout << *(std::end(arr) - 1)<< '\n';
}

В Microsoft Visual Studio c++ редактор уже показал бы проблему.

И c++ компилятор выдаст 2 сообщения c++ с понятной подсказкой.

См. снимок cxx экрана ниже:

как проверить, что члены массива const монотонно растут во время компиляции_c++




.

.

.

Кстати, принятый cpp ответ компилируется, как cxx показано ниже

как проверить, что члены массива const монотонно растут во время компиляции_cxx

А с фиксацией cxx на constexpr мы видим:

как проверить, что члены массива const монотонно растут во время компиляции_constexpr-function

c++

constexpr

constexpr-function

2022-11-28T05:58:19+00:00