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