13e519524SHoward Hinnant// -*- C++ -*- 23e519524SHoward Hinnant//===----------------------- initializer_list -----------------------------===// 33e519524SHoward Hinnant// 45b08a8a4SHoward Hinnant// The LLVM Compiler Infrastructure 53e519524SHoward Hinnant// 6412dbebeSHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 7412dbebeSHoward Hinnant// Source Licenses. See LICENSE.TXT for details. 83e519524SHoward Hinnant// 93e519524SHoward Hinnant//===----------------------------------------------------------------------===// 103e519524SHoward Hinnant 113e519524SHoward Hinnant#ifndef _LIBCPP_INITIALIZER_LIST 123e519524SHoward Hinnant#define _LIBCPP_INITIALIZER_LIST 133e519524SHoward Hinnant 143e519524SHoward Hinnant/* 153e519524SHoward Hinnant initializer_list synopsis 163e519524SHoward Hinnant 173e519524SHoward Hinnantnamespace std 183e519524SHoward Hinnant{ 193e519524SHoward Hinnant 203e519524SHoward Hinnanttemplate<class E> 213e519524SHoward Hinnantclass initializer_list 223e519524SHoward Hinnant{ 233e519524SHoward Hinnantpublic: 243e519524SHoward Hinnant typedef E value_type; 253e519524SHoward Hinnant typedef const E& reference; 263e519524SHoward Hinnant typedef const E& const_reference; 273e519524SHoward Hinnant typedef size_t size_type; 283e519524SHoward Hinnant 293e519524SHoward Hinnant typedef const E* iterator; 303e519524SHoward Hinnant typedef const E* const_iterator; 313e519524SHoward Hinnant 3293288117SHoward Hinnant initializer_list() noexcept; // constexpr in C++14 333e519524SHoward Hinnant 3493288117SHoward Hinnant size_t size() const noexcept; // constexpr in C++14 3593288117SHoward Hinnant const E* begin() const noexcept; // constexpr in C++14 3693288117SHoward Hinnant const E* end() const noexcept; // constexpr in C++14 373e519524SHoward Hinnant}; 383e519524SHoward Hinnant 3993288117SHoward Hinnanttemplate<class E> const E* begin(initializer_list<E> il) noexcept; // constexpr in C++14 4093288117SHoward Hinnanttemplate<class E> const E* end(initializer_list<E> il) noexcept; // constexpr in C++14 419d4a2861SHoward Hinnant 423e519524SHoward Hinnant} // std 433e519524SHoward Hinnant 443e519524SHoward Hinnant*/ 453e519524SHoward Hinnant 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 5654976f26SHoward Hinnant#ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 5754976f26SHoward Hinnant 58c003db1fSHoward Hinnanttemplate<class _Ep> 59*e2f2d1edSEric Fiselierclass _LIBCPP_TEMPLATE_VIS initializer_list 603e519524SHoward Hinnant{ 61c003db1fSHoward Hinnant const _Ep* __begin_; 623e519524SHoward Hinnant size_t __size_; 633e519524SHoward Hinnant 643e519524SHoward Hinnant _LIBCPP_ALWAYS_INLINE 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 7993288117SHoward Hinnant _LIBCPP_ALWAYS_INLINE 8093288117SHoward Hinnant _LIBCPP_CONSTEXPR_AFTER_CXX11 8193288117SHoward Hinnant initializer_list() _NOEXCEPT : __begin_(nullptr), __size_(0) {} 823e519524SHoward Hinnant 8393288117SHoward Hinnant _LIBCPP_ALWAYS_INLINE 8493288117SHoward Hinnant _LIBCPP_CONSTEXPR_AFTER_CXX11 8593288117SHoward Hinnant size_t size() const _NOEXCEPT {return __size_;} 8693288117SHoward Hinnant 8793288117SHoward Hinnant _LIBCPP_ALWAYS_INLINE 8893288117SHoward Hinnant _LIBCPP_CONSTEXPR_AFTER_CXX11 8993288117SHoward Hinnant const _Ep* begin() const _NOEXCEPT {return __begin_;} 9093288117SHoward Hinnant 9193288117SHoward Hinnant _LIBCPP_ALWAYS_INLINE 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 11454976f26SHoward Hinnant#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 11554976f26SHoward Hinnant 1163e519524SHoward Hinnant} // std 1173e519524SHoward Hinnant 1183e519524SHoward Hinnant#endif // _LIBCPP_INITIALIZER_LIST 119