10b57cec5SDimitry Andric// -*- C++ -*- 2349cc55cSDimitry Andric//===----------------------------------------------------------------------===// 30b57cec5SDimitry Andric// 40b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 50b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 60b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 70b57cec5SDimitry Andric// 80b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 90b57cec5SDimitry Andric 100b57cec5SDimitry Andric#ifndef _LIBCPP_INITIALIZER_LIST 110b57cec5SDimitry Andric#define _LIBCPP_INITIALIZER_LIST 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric/* 140b57cec5SDimitry Andric initializer_list synopsis 150b57cec5SDimitry Andric 160b57cec5SDimitry Andricnamespace std 170b57cec5SDimitry Andric{ 180b57cec5SDimitry Andric 190b57cec5SDimitry Andrictemplate<class E> 200b57cec5SDimitry Andricclass initializer_list 210b57cec5SDimitry Andric{ 220b57cec5SDimitry Andricpublic: 230b57cec5SDimitry Andric typedef E value_type; 240b57cec5SDimitry Andric typedef const E& reference; 250b57cec5SDimitry Andric typedef const E& const_reference; 260b57cec5SDimitry Andric typedef size_t size_type; 270b57cec5SDimitry Andric 280b57cec5SDimitry Andric typedef const E* iterator; 290b57cec5SDimitry Andric typedef const E* const_iterator; 300b57cec5SDimitry Andric 310b57cec5SDimitry Andric initializer_list() noexcept; // constexpr in C++14 320b57cec5SDimitry Andric 330b57cec5SDimitry Andric size_t size() const noexcept; // constexpr in C++14 340b57cec5SDimitry Andric const E* begin() const noexcept; // constexpr in C++14 350b57cec5SDimitry Andric const E* end() const noexcept; // constexpr in C++14 360b57cec5SDimitry Andric}; 370b57cec5SDimitry Andric 380b57cec5SDimitry Andrictemplate<class E> const E* begin(initializer_list<E> il) noexcept; // constexpr in C++14 390b57cec5SDimitry Andrictemplate<class E> const E* end(initializer_list<E> il) noexcept; // constexpr in C++14 400b57cec5SDimitry Andric 410b57cec5SDimitry Andric} // std 420b57cec5SDimitry Andric 430b57cec5SDimitry Andric*/ 440b57cec5SDimitry Andric 450b57cec5SDimitry Andric#include <__config> 460b57cec5SDimitry Andric#include <cstddef> 470b57cec5SDimitry Andric 480b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 490b57cec5SDimitry Andric# pragma GCC system_header 500b57cec5SDimitry Andric#endif 510b57cec5SDimitry Andric 520b57cec5SDimitry Andricnamespace std // purposefully not versioned 530b57cec5SDimitry Andric{ 540b57cec5SDimitry Andric 550b57cec5SDimitry Andric#ifndef _LIBCPP_CXX03_LANG 560b57cec5SDimitry Andric 570b57cec5SDimitry Andrictemplate <class _Ep> 58*cb14a3feSDimitry Andricclass _LIBCPP_TEMPLATE_VIS initializer_list { 590b57cec5SDimitry Andric const _Ep* __begin_; 600b57cec5SDimitry Andric size_t __size_; 610b57cec5SDimitry Andric 62*cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 initializer_list(const _Ep* __b, size_t __s) _NOEXCEPT 630b57cec5SDimitry Andric : __begin_(__b), 64*cb14a3feSDimitry Andric __size_(__s) {} 65*cb14a3feSDimitry Andric 660b57cec5SDimitry Andricpublic: 670b57cec5SDimitry Andric typedef _Ep value_type; 680b57cec5SDimitry Andric typedef const _Ep& reference; 690b57cec5SDimitry Andric typedef const _Ep& const_reference; 700b57cec5SDimitry Andric typedef size_t size_type; 710b57cec5SDimitry Andric 720b57cec5SDimitry Andric typedef const _Ep* iterator; 730b57cec5SDimitry Andric typedef const _Ep* const_iterator; 740b57cec5SDimitry Andric 75*cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 initializer_list() _NOEXCEPT : __begin_(nullptr), __size_(0) {} 760b57cec5SDimitry Andric 77*cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 size_t size() const _NOEXCEPT { return __size_; } 780b57cec5SDimitry Andric 79*cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Ep* begin() const _NOEXCEPT { return __begin_; } 800b57cec5SDimitry Andric 81*cb14a3feSDimitry Andric _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Ep* end() const _NOEXCEPT { return __begin_ + __size_; } 820b57cec5SDimitry Andric}; 830b57cec5SDimitry Andric 840b57cec5SDimitry Andrictemplate <class _Ep> 85*cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Ep* begin(initializer_list<_Ep> __il) _NOEXCEPT { 860b57cec5SDimitry Andric return __il.begin(); 870b57cec5SDimitry Andric} 880b57cec5SDimitry Andric 890b57cec5SDimitry Andrictemplate <class _Ep> 90*cb14a3feSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Ep* end(initializer_list<_Ep> __il) _NOEXCEPT { 910b57cec5SDimitry Andric return __il.end(); 920b57cec5SDimitry Andric} 930b57cec5SDimitry Andric 940b57cec5SDimitry Andric#endif // !defined(_LIBCPP_CXX03_LANG) 950b57cec5SDimitry Andric 960eae32dcSDimitry Andric} // namespace std 970b57cec5SDimitry Andric 980b57cec5SDimitry Andric#endif // _LIBCPP_INITIALIZER_LIST 99