#include <iostream>

constexpr int input[] = {-1, 12, 5, 18, 0, -7, -22, 3};
constexpr int size = sizeof(input)/sizeof(input[0]);

struct SortedArray {
    int data[size] {};

    constexpr SortedArray(const int input[], int size) {
        for (int i = 0; i < size; ++i)
            data[i] = input[i];
    }
};

constexpr SortedArray bubbleSort(const int input[], int size) {
    SortedArray output(input,size);

    bool s = true;
    while (s) {
        s = false;
        for (int i = 1; i < size; ++i) {
            if (output.data[i] < output.data[i-1]) {
                int tmp = output.data[i];
                output.data[i] = output.data[i-1];
                output.data[i-1] = tmp;
                s = true;
            }
        }
    }

    return output;
}

constexpr SortedArray sorted = bubbleSort(input,size);

static_assert(sorted.data[0] == -22, "runtime");

int main() {
    for (int i = 0; i < size; ++i)
        std::cout << sorted.data[i] << ' ';
    std::cout << std::endl;
}