#include #include template constexpr bool array_equal(const std::array& a, const std::array& b) { for (size_t i = 0; i < N; i++) { if (a[i] != b[i]) return false; } return true; } constexpr bool test() { ring_buffer buf; buf.push_back(1); buf.push_back(2); buf.push_back(3); buf.push_back(4); buf.push_back(5); buf.push_back(6); { std::array expected{13, 14, 15, 16}; std::array actual; int actual_index = 0; for (int& i : buf) { i += 10; actual[actual_index++] = i; } if (!array_equal(actual, expected)) return false; } buf.push_back(7); { std::array expected{24, 25, 26, 17}; std::array actual; int actual_index = 0; for (int& i : buf) { i += 10; actual[actual_index++] = i; } if (!array_equal(actual, expected)) return false; } return true; } static_assert(test()); int main() {}