1    	// std::initializer_list support -*- C++ -*-
2    	
3    	// Copyright (C) 2008-2013 Free Software Foundation, Inc.
4    	//
5    	// This file is part of GCC.
6    	//
7    	// GCC is free software; you can redistribute it and/or modify
8    	// it under the terms of the GNU General Public License as published by
9    	// the Free Software Foundation; either version 3, or (at your option)
10   	// any later version.
11   	//
12   	// GCC is distributed in the hope that it will be useful,
13   	// but WITHOUT ANY WARRANTY; without even the implied warranty of
14   	// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   	// GNU General Public License for more details.
16   	//
17   	// Under Section 7 of GPL version 3, you are granted additional
18   	// permissions described in the GCC Runtime Library Exception, version
19   	// 3.1, as published by the Free Software Foundation.
20   	
21   	// You should have received a copy of the GNU General Public License and
22   	// a copy of the GCC Runtime Library Exception along with this program;
23   	// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
24   	// <http://www.gnu.org/licenses/>.
25   	
26   	/** @file initializer_list
27   	 *  This is a Standard C++ Library header.
28   	 */
29   	
30   	#ifndef _INITIALIZER_LIST
31   	#define _INITIALIZER_LIST
32   	
33   	#pragma GCC system_header
34   	
35   	#if __cplusplus < 201103L
36   	# include <bits/c++0x_warning.h>
37   	#else // C++0x
38   	
39   	#pragma GCC visibility push(default)
40   	
41   	#include <bits/c++config.h>
42   	
43   	namespace std
44   	{
45   	  /// initializer_list
46   	  template<class _E>
47   	    class initializer_list
48   	    {
49   	    public:
50   	      typedef _E 		value_type;
51   	      typedef const _E& 	reference;
52   	      typedef const _E& 	const_reference;
53   	      typedef size_t 		size_type;
54   	      typedef const _E* 	iterator;
55   	      typedef const _E* 	const_iterator;
56   	
57   	    private:
58   	      iterator			_M_array;
59   	      size_type			_M_len;
60   	
61   	      // The compiler can call a private constructor.
62   	      constexpr initializer_list(const_iterator __a, size_type __l)
63   	      : _M_array(__a), _M_len(__l) { }
64   	
65   	    public:
66   	      constexpr initializer_list() noexcept
67   	      : _M_array(0), _M_len(0) { }
68   	
69   	      // Number of elements.
70   	      constexpr size_type
71   	      size() const noexcept { return _M_len; }
72   	
73   	      // First element.
74   	      constexpr const_iterator
75   	      begin() const noexcept { return _M_array; }
76   	
77   	      // One past the last element.
78   	      constexpr const_iterator
79   	      end() const noexcept { return begin() + size(); }
80   	    };
81   	
82   	  /**
83   	   *  @brief  Return an iterator pointing to the first element of
84   	   *          the initilizer_list.
85   	   *  @param  __ils  Initializer list.
86   	   */
87   	  template<class _Tp>
88   	    constexpr const _Tp*
89   	    begin(initializer_list<_Tp> __ils) noexcept
90   	    { return __ils.begin(); }
91   	
92   	  /**
93   	   *  @brief  Return an iterator pointing to one past the last element
94   	   *          of the initilizer_list.
95   	   *  @param  __ils  Initializer list.
96   	   */
97   	  template<class _Tp>
98   	    constexpr const _Tp*
99   	    end(initializer_list<_Tp> __ils) noexcept
100  	    { return __ils.end(); }
101  	}
102  	
103  	#pragma GCC visibility pop
104  	
105  	#endif // C++11
106  	
107  	#endif // _INITIALIZER_LIST
108