#include <iostream>
using namespace std;

#include <cstddef>

namespace test
{
 
template<class _E>
class initializer_list
{
public:
    typedef _E              value_type;
    typedef const _E&       reference;
    typedef const _E&       const_reference;
    typedef size_t          size_type;
    typedef const _E*       iterator;
    typedef const _E*       const_iterator;
 
private:
    iterator          _M_array;
    size_type         _M_len;
 
    constexpr initializer_list(const_iterator __a, size_type __l)
    : _M_array(__a), _M_len(__l) { }
 
public:
    constexpr initializer_list() : _M_array(0), _M_len(0) { }
 
    constexpr size_type
    size() { return _M_len; }
 
    constexpr const_iterator
    begin() { return _M_array; }
 
    constexpr const_iterator
    end() { return begin() + size(); }
};
 
template<class _Tp>
    constexpr const _Tp*
    begin(initializer_list<_Tp> __ils)
{ return __ils.begin(); }
 
template<class _Tp>
    constexpr const _Tp*
    end(initializer_list<_Tp> __ils)
{ return __ils.end(); }
 
}

int main() {
	std::initializer_list<int> std_list = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	test::initializer_list<int> test_list = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	return 0;
}