13e519524SHoward Hinnant// -*- C++ -*- 2eb8650a7SLouis Dionne//===----------------------------------------------------------------------===// 33e519524SHoward Hinnant// 457b08b09SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 557b08b09SChandler Carruth// See https://llvm.org/LICENSE.txt for license information. 657b08b09SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 73e519524SHoward Hinnant// 83e519524SHoward Hinnant//===----------------------------------------------------------------------===// 93e519524SHoward Hinnant 103e519524SHoward Hinnant#ifndef _LIBCPP_INITIALIZER_LIST 113e519524SHoward Hinnant#define _LIBCPP_INITIALIZER_LIST 123e519524SHoward Hinnant 133e519524SHoward Hinnant/* 143e519524SHoward Hinnant initializer_list synopsis 153e519524SHoward Hinnant 163e519524SHoward Hinnantnamespace std 173e519524SHoward Hinnant{ 183e519524SHoward Hinnant 193e519524SHoward Hinnanttemplate<class E> 203e519524SHoward Hinnantclass initializer_list 213e519524SHoward Hinnant{ 223e519524SHoward Hinnantpublic: 233e519524SHoward Hinnant typedef E value_type; 243e519524SHoward Hinnant typedef const E& reference; 253e519524SHoward Hinnant typedef const E& const_reference; 263e519524SHoward Hinnant typedef size_t size_type; 273e519524SHoward Hinnant 283e519524SHoward Hinnant typedef const E* iterator; 293e519524SHoward Hinnant typedef const E* const_iterator; 303e519524SHoward Hinnant 3193288117SHoward Hinnant initializer_list() noexcept; // constexpr in C++14 323e519524SHoward Hinnant 3393288117SHoward Hinnant size_t size() const noexcept; // constexpr in C++14 3493288117SHoward Hinnant const E* begin() const noexcept; // constexpr in C++14 3593288117SHoward Hinnant const E* end() const noexcept; // constexpr in C++14 363e519524SHoward Hinnant}; 373e519524SHoward Hinnant 3893288117SHoward Hinnanttemplate<class E> const E* begin(initializer_list<E> il) noexcept; // constexpr in C++14 3993288117SHoward Hinnanttemplate<class E> const E* end(initializer_list<E> il) noexcept; // constexpr in C++14 409d4a2861SHoward Hinnant 413e519524SHoward Hinnant} // std 423e519524SHoward Hinnant 433e519524SHoward Hinnant*/ 443e519524SHoward Hinnant 45*385cc25aSLouis Dionne#include <__assert> // all public C++ headers provide the assertion handler 463e519524SHoward Hinnant#include <__config> 473e519524SHoward Hinnant#include <cstddef> 483e519524SHoward Hinnant 49073458b1SHoward Hinnant#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 503e519524SHoward Hinnant# pragma GCC system_header 51073458b1SHoward Hinnant#endif 523e519524SHoward Hinnant 533e519524SHoward Hinnantnamespace std // purposefully not versioned 543e519524SHoward Hinnant{ 553e519524SHoward Hinnant 5694b2bde6SEric Fiselier#ifndef _LIBCPP_CXX03_LANG 5754976f26SHoward Hinnant 58c003db1fSHoward Hinnanttemplate<class _Ep> 59e2f2d1edSEric Fiselierclass _LIBCPP_TEMPLATE_VIS initializer_list 603e519524SHoward Hinnant{ 61c003db1fSHoward Hinnant const _Ep* __begin_; 623e519524SHoward Hinnant size_t __size_; 633e519524SHoward Hinnant 64dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY 6593288117SHoward Hinnant _LIBCPP_CONSTEXPR_AFTER_CXX11 66c003db1fSHoward Hinnant initializer_list(const _Ep* __b, size_t __s) _NOEXCEPT 673e519524SHoward Hinnant : __begin_(__b), 683e519524SHoward Hinnant __size_(__s) 693e519524SHoward Hinnant {} 703e519524SHoward Hinnantpublic: 71c003db1fSHoward Hinnant typedef _Ep value_type; 72c003db1fSHoward Hinnant typedef const _Ep& reference; 73c003db1fSHoward Hinnant typedef const _Ep& const_reference; 743e519524SHoward Hinnant typedef size_t size_type; 753e519524SHoward Hinnant 76c003db1fSHoward Hinnant typedef const _Ep* iterator; 77c003db1fSHoward Hinnant typedef const _Ep* const_iterator; 783e519524SHoward Hinnant 79dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY 8093288117SHoward Hinnant _LIBCPP_CONSTEXPR_AFTER_CXX11 8193288117SHoward Hinnant initializer_list() _NOEXCEPT : __begin_(nullptr), __size_(0) {} 823e519524SHoward Hinnant 83dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY 8493288117SHoward Hinnant _LIBCPP_CONSTEXPR_AFTER_CXX11 8593288117SHoward Hinnant size_t size() const _NOEXCEPT {return __size_;} 8693288117SHoward Hinnant 87dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY 8893288117SHoward Hinnant _LIBCPP_CONSTEXPR_AFTER_CXX11 8993288117SHoward Hinnant const _Ep* begin() const _NOEXCEPT {return __begin_;} 9093288117SHoward Hinnant 91dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY 9293288117SHoward Hinnant _LIBCPP_CONSTEXPR_AFTER_CXX11 9393288117SHoward Hinnant const _Ep* end() const _NOEXCEPT {return __begin_ + __size_;} 943e519524SHoward Hinnant}; 953e519524SHoward Hinnant 96c003db1fSHoward Hinnanttemplate<class _Ep> 979d4a2861SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 9893288117SHoward Hinnant_LIBCPP_CONSTEXPR_AFTER_CXX11 99c003db1fSHoward Hinnantconst _Ep* 100c003db1fSHoward Hinnantbegin(initializer_list<_Ep> __il) _NOEXCEPT 1019d4a2861SHoward Hinnant{ 1029d4a2861SHoward Hinnant return __il.begin(); 1039d4a2861SHoward Hinnant} 1049d4a2861SHoward Hinnant 105c003db1fSHoward Hinnanttemplate<class _Ep> 1069d4a2861SHoward Hinnantinline _LIBCPP_INLINE_VISIBILITY 10793288117SHoward Hinnant_LIBCPP_CONSTEXPR_AFTER_CXX11 108c003db1fSHoward Hinnantconst _Ep* 109c003db1fSHoward Hinnantend(initializer_list<_Ep> __il) _NOEXCEPT 1109d4a2861SHoward Hinnant{ 1119d4a2861SHoward Hinnant return __il.end(); 1129d4a2861SHoward Hinnant} 1139d4a2861SHoward Hinnant 11494b2bde6SEric Fiselier#endif // !defined(_LIBCPP_CXX03_LANG) 11554976f26SHoward Hinnant 116d2b0df35SNikolas Klauser} // namespace std 1173e519524SHoward Hinnant 1183e519524SHoward Hinnant#endif // _LIBCPP_INITIALIZER_LIST 119