#include <iostream>

template <typename T, int N>
class array {
public:
    array() = default;
    array(std::initializer_list<T> list) {
        std::copy(std::begin(list), std::end(list), data);
    }

    const T& operator[](int index) const { return data[index]; }
    T& operator[](int index) { return data[index]; }

    int size() const { return N; }

    const T* begin() const { return data; }
    T* begin() { return data; }

    const T* end() const { return data + N; }
    T* end() { return data + N; }

private:
    T data[N];
};

int main() {
    array<int, 5> a{1, 2, 3, 4, 5};
    int res = 0;
    for (auto x : a) {
        res += x; 
    }
    std::cout << res << std::endl;  // 15
}