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 4581ad6265SDimitry Andric#include <__assert> // all public C++ headers provide the assertion handler 460b57cec5SDimitry Andric#include <__config> 470b57cec5SDimitry Andric#include <cstddef> 480b57cec5SDimitry Andric 490b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 500b57cec5SDimitry Andric# pragma GCC system_header 510b57cec5SDimitry Andric#endif 520b57cec5SDimitry Andric 530b57cec5SDimitry Andricnamespace std // purposefully not versioned 540b57cec5SDimitry Andric{ 550b57cec5SDimitry Andric 560b57cec5SDimitry Andric#ifndef _LIBCPP_CXX03_LANG 570b57cec5SDimitry Andric 580b57cec5SDimitry Andrictemplate <class _Ep> 59*e710425bSDimitry Andricclass _LIBCPP_TEMPLATE_VIS initializer_list { 600b57cec5SDimitry Andric const _Ep* __begin_; 610b57cec5SDimitry Andric size_t __size_; 620b57cec5SDimitry Andric 63*e710425bSDimitry Andric _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 initializer_list(const _Ep* __b, size_t __s) _NOEXCEPT 640b57cec5SDimitry Andric : __begin_(__b), 65*e710425bSDimitry Andric __size_(__s) {} 66*e710425bSDimitry Andric 670b57cec5SDimitry Andricpublic: 680b57cec5SDimitry Andric typedef _Ep value_type; 690b57cec5SDimitry Andric typedef const _Ep& reference; 700b57cec5SDimitry Andric typedef const _Ep& const_reference; 710b57cec5SDimitry Andric typedef size_t size_type; 720b57cec5SDimitry Andric 730b57cec5SDimitry Andric typedef const _Ep* iterator; 740b57cec5SDimitry Andric typedef const _Ep* const_iterator; 750b57cec5SDimitry Andric 76*e710425bSDimitry Andric _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 initializer_list() _NOEXCEPT : __begin_(nullptr), __size_(0) {} 770b57cec5SDimitry Andric 78*e710425bSDimitry Andric _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 size_t size() const _NOEXCEPT { return __size_; } 790b57cec5SDimitry Andric 80*e710425bSDimitry Andric _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Ep* begin() const _NOEXCEPT { return __begin_; } 810b57cec5SDimitry Andric 82*e710425bSDimitry Andric _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Ep* end() const _NOEXCEPT { return __begin_ + __size_; } 830b57cec5SDimitry Andric}; 840b57cec5SDimitry Andric 850b57cec5SDimitry Andrictemplate <class _Ep> 86*e710425bSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Ep* begin(initializer_list<_Ep> __il) _NOEXCEPT { 870b57cec5SDimitry Andric return __il.begin(); 880b57cec5SDimitry Andric} 890b57cec5SDimitry Andric 900b57cec5SDimitry Andrictemplate <class _Ep> 91*e710425bSDimitry Andricinline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Ep* end(initializer_list<_Ep> __il) _NOEXCEPT { 920b57cec5SDimitry Andric return __il.end(); 930b57cec5SDimitry Andric} 940b57cec5SDimitry Andric 950b57cec5SDimitry Andric#endif // !defined(_LIBCPP_CXX03_LANG) 960b57cec5SDimitry Andric 970eae32dcSDimitry Andric} // namespace std 980b57cec5SDimitry Andric 990b57cec5SDimitry Andric#endif // _LIBCPP_INITIALIZER_LIST 100