1// std::initializer_list support -*- C++ -*- 2 3// Copyright (C) 2008-2018 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 43namespace 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 initializer_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 initializer_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