| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- // std::initializer_list support -*- C++ -*-
- // Copyright (C) 2008-2020 Free Software Foundation, Inc.
- //
- // This file is part of GCC.
- //
- // GCC is free software; you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation; either version 3, or (at your option)
- // any later version.
- //
- // GCC is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // Under Section 7 of GPL version 3, you are granted additional
- // permissions described in the GCC Runtime Library Exception, version
- // 3.1, as published by the Free Software Foundation.
- // You should have received a copy of the GNU General Public License and
- // a copy of the GCC Runtime Library Exception along with this program;
- // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- // <http://www.gnu.org/licenses/>.
- /** @file initializer_list
- * This is a Standard C++ Library header.
- */
- #ifndef _INITIALIZER_LIST
- #define _INITIALIZER_LIST
- #pragma GCC system_header
- #if __cplusplus < 201103L
- # include <bits/c++0x_warning.h>
- #else // C++0x
- #pragma GCC visibility push(default)
- #include <bits/c++config.h>
- namespace std
- {
- /// initializer_list
- 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;
- // The compiler can call a private constructor.
- constexpr initializer_list(const_iterator __a, size_type __l)
- : _M_array(__a), _M_len(__l) { }
- public:
- constexpr initializer_list() noexcept
- : _M_array(0), _M_len(0) { }
- // Number of elements.
- constexpr size_type
- size() const noexcept { return _M_len; }
- // First element.
- constexpr const_iterator
- begin() const noexcept { return _M_array; }
- // One past the last element.
- constexpr const_iterator
- end() const noexcept { return begin() + size(); }
- };
- /**
- * @brief Return an iterator pointing to the first element of
- * the initializer_list.
- * @param __ils Initializer list.
- * @relates initializer_list
- */
- template<class _Tp>
- constexpr const _Tp*
- begin(initializer_list<_Tp> __ils) noexcept
- { return __ils.begin(); }
- /**
- * @brief Return an iterator pointing to one past the last element
- * of the initializer_list.
- * @param __ils Initializer list.
- * @relates initializer_list
- */
- template<class _Tp>
- constexpr const _Tp*
- end(initializer_list<_Tp> __ils) noexcept
- { return __ils.end(); }
- }
- #pragma GCC visibility pop
- #endif // C++11
- #endif // _INITIALIZER_LIST
|