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