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

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

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

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

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

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

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

#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 constexpr-function редактор уже показал бы проблему.

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

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

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




.

.

.

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

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

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

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

c++

constexpr

constexpr-function

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