 e1c5f9ec1b
			
		
	
	e1c5f9ec1b
	
	
	
		
			
			git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@189271 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			119 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // -*- C++ -*-
 | |
| //===----------------------- initializer_list -----------------------------===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is dual licensed under the MIT and the University of Illinois Open
 | |
| // Source Licenses. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef _LIBCPP_INITIALIZER_LIST
 | |
| #define _LIBCPP_INITIALIZER_LIST
 | |
| 
 | |
| /*
 | |
|     initializer_list synopsis
 | |
| 
 | |
| namespace std
 | |
| {
 | |
| 
 | |
| template<class E>
 | |
| class initializer_list
 | |
| {
 | |
| public:
 | |
|     typedef E        value_type;
 | |
|     typedef const E& reference;
 | |
|     typedef const E& const_reference;
 | |
|     typedef size_t   size_type;
 | |
| 
 | |
|     typedef const E* iterator;
 | |
|     typedef const E* const_iterator;
 | |
| 
 | |
|     initializer_list() noexcept; // constexpr in C++14
 | |
| 
 | |
|     size_t   size()  const noexcept; // constexpr in C++14
 | |
|     const E* begin() const noexcept; // constexpr in C++14
 | |
|     const E* end()   const noexcept; // constexpr in C++14
 | |
| };
 | |
| 
 | |
| template<class E> const E* begin(initializer_list<E> il) noexcept; // constexpr in C++14
 | |
| template<class E> const E* end(initializer_list<E> il) noexcept; // constexpr in C++14
 | |
| 
 | |
| }  // std
 | |
| 
 | |
| */
 | |
| 
 | |
| #include <__config>
 | |
| #include <cstddef>
 | |
| 
 | |
| #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 | |
| #pragma GCC system_header
 | |
| #endif
 | |
| 
 | |
| namespace std  // purposefully not versioned
 | |
| {
 | |
| 
 | |
| #ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
 | |
| 
 | |
| template<class _Ep>
 | |
| class _LIBCPP_TYPE_VIS_ONLY initializer_list
 | |
| {
 | |
|     const _Ep* __begin_;
 | |
|     size_t    __size_;
 | |
| 
 | |
|     _LIBCPP_ALWAYS_INLINE
 | |
|     _LIBCPP_CONSTEXPR_AFTER_CXX11
 | |
|     initializer_list(const _Ep* __b, size_t __s) _NOEXCEPT
 | |
|         : __begin_(__b),
 | |
|           __size_(__s)
 | |
|         {}
 | |
| public:
 | |
|     typedef _Ep        value_type;
 | |
|     typedef const _Ep& reference;
 | |
|     typedef const _Ep& const_reference;
 | |
|     typedef size_t    size_type;
 | |
| 
 | |
|     typedef const _Ep* iterator;
 | |
|     typedef const _Ep* const_iterator;
 | |
| 
 | |
|     _LIBCPP_ALWAYS_INLINE
 | |
|     _LIBCPP_CONSTEXPR_AFTER_CXX11
 | |
|     initializer_list() _NOEXCEPT : __begin_(nullptr), __size_(0) {}
 | |
| 
 | |
|     _LIBCPP_ALWAYS_INLINE
 | |
|     _LIBCPP_CONSTEXPR_AFTER_CXX11
 | |
|     size_t    size()  const _NOEXCEPT {return __size_;}
 | |
|     
 | |
|     _LIBCPP_ALWAYS_INLINE
 | |
|     _LIBCPP_CONSTEXPR_AFTER_CXX11
 | |
|     const _Ep* begin() const _NOEXCEPT {return __begin_;}
 | |
| 
 | |
|     _LIBCPP_ALWAYS_INLINE
 | |
|     _LIBCPP_CONSTEXPR_AFTER_CXX11
 | |
|     const _Ep* end()   const _NOEXCEPT {return __begin_ + __size_;}
 | |
| };
 | |
| 
 | |
| template<class _Ep>
 | |
| inline _LIBCPP_INLINE_VISIBILITY
 | |
| _LIBCPP_CONSTEXPR_AFTER_CXX11
 | |
| const _Ep*
 | |
| begin(initializer_list<_Ep> __il) _NOEXCEPT
 | |
| {
 | |
|     return __il.begin();
 | |
| }
 | |
| 
 | |
| template<class _Ep>
 | |
| inline _LIBCPP_INLINE_VISIBILITY
 | |
| _LIBCPP_CONSTEXPR_AFTER_CXX11
 | |
| const _Ep*
 | |
| end(initializer_list<_Ep> __il) _NOEXCEPT
 | |
| {
 | |
|     return __il.end();
 | |
| }
 | |
| 
 | |
| #endif  // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
 | |
| 
 | |
| }  // std
 | |
| 
 | |
| #endif  // _LIBCPP_INITIALIZER_LIST
 |