Эх сурвалжийг харах

[support.initlist.range]

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@104975 91177308-0d34-0410-b5e6-96231b3b80d8
Howard Hinnant 15 жил өмнө
parent
commit
fcc593875c

+ 19 - 0
include/initializer_list

@@ -36,6 +36,9 @@ public:
     const E* end()   const;
 };
 
+template<class E> const E* begin(initializer_list<E> il);
+template<class E> const E* end(initializer_list<E> il);
+
 }  // std
 
 */
@@ -75,6 +78,22 @@ public:
     _LIBCPP_ALWAYS_INLINE const _E* end()   const {return __begin_ + __size_;}
 };
 
+template<class _E>
+inline _LIBCPP_INLINE_VISIBILITY
+const _E*
+begin(initializer_list<_E> __il)
+{
+    return __il.begin();
+}
+
+template<class _E>
+inline _LIBCPP_INLINE_VISIBILITY
+const _E*
+end(initializer_list<_E> __il)
+{
+    return __il.end();
+}
+
 }  // std
 
 #endif  // _LIBCPP_INITIALIZER_LIST

+ 36 - 0
test/language.support/support.initlist/support.initlist.range/begin_end.pass.cpp

@@ -0,0 +1,36 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <initializer_list>
+
+// template<class E> const E* begin(initializer_list<E> il);
+
+#include <initializer_list>
+#include <cassert>
+
+struct A
+{
+    A(std::initializer_list<int> il)
+    {
+        const int* b = begin(il);
+        const int* e = end(il);
+        assert(il.size() == 3);
+        assert(e - b == il.size());
+        assert(*b++ == 3);
+        assert(*b++ == 2);
+        assert(*b++ == 1);
+    }
+};
+
+int main()
+{
+#ifdef _LIBCPP_MOVE
+    A test1 = {3, 2, 1};
+#endif
+}