From 34d36f39b0688bdd7428c766fc8e1afa45759dac Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Wed, 27 Mar 2013 04:10:25 +0000 Subject: [PATCH] Revert r178075, "Tighten up the iterator requirements ...", it breaks LLVM bootstrap with libc++. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@178116 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/vector | 80 ++++--------------- .../vector.cons/construct_iter_iter.pass.cpp | 7 -- 2 files changed, 16 insertions(+), 71 deletions(-) diff --git a/include/vector b/include/vector index d1bc23e6..a083bfe0 100644 --- a/include/vector +++ b/include/vector @@ -526,29 +526,17 @@ public: template vector(_InputIterator __first, _InputIterator __last, typename enable_if<__is_input_iterator <_InputIterator>::value && - !__is_forward_iterator<_InputIterator>::value && - is_constructible< - value_type, - typename iterator_traits<_InputIterator>::reference>::value>::type* = 0); + !__is_forward_iterator<_InputIterator>::value>::type* = 0); template vector(_InputIterator __first, _InputIterator __last, const allocator_type& __a, typename enable_if<__is_input_iterator <_InputIterator>::value && - !__is_forward_iterator<_InputIterator>::value && - is_constructible< - value_type, - typename iterator_traits<_InputIterator>::reference>::value>::type* = 0); + !__is_forward_iterator<_InputIterator>::value>::type* = 0); template vector(_ForwardIterator __first, _ForwardIterator __last, - typename enable_if<__is_forward_iterator<_ForwardIterator>::value && - is_constructible< - value_type, - typename iterator_traits<_ForwardIterator>::reference>::value>::type* = 0); + typename enable_if<__is_forward_iterator<_ForwardIterator>::value>::type* = 0); template vector(_ForwardIterator __first, _ForwardIterator __last, const allocator_type& __a, - typename enable_if<__is_forward_iterator<_ForwardIterator>::value && - is_constructible< - value_type, - typename iterator_traits<_ForwardIterator>::reference>::value>::type* = 0); + typename enable_if<__is_forward_iterator<_ForwardIterator>::value>::type* = 0); #ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS _LIBCPP_INLINE_VISIBILITY vector(initializer_list __il); @@ -589,20 +577,14 @@ public: typename enable_if < __is_input_iterator <_InputIterator>::value && - !__is_forward_iterator<_InputIterator>::value && - is_constructible< - value_type, - typename iterator_traits<_InputIterator>::reference>::value, + !__is_forward_iterator<_InputIterator>::value, void >::type assign(_InputIterator __first, _InputIterator __last); template typename enable_if < - __is_forward_iterator<_ForwardIterator>::value && - is_constructible< - value_type, - typename iterator_traits<_ForwardIterator>::reference>::value, + __is_forward_iterator<_ForwardIterator>::value, void >::type assign(_ForwardIterator __first, _ForwardIterator __last); @@ -718,20 +700,14 @@ public: typename enable_if < __is_input_iterator <_InputIterator>::value && - !__is_forward_iterator<_InputIterator>::value && - is_constructible< - value_type, - typename iterator_traits<_InputIterator>::reference>::value, + !__is_forward_iterator<_InputIterator>::value, iterator >::type insert(const_iterator __position, _InputIterator __first, _InputIterator __last); template typename enable_if < - __is_forward_iterator<_ForwardIterator>::value && - is_constructible< - value_type, - typename iterator_traits<_ForwardIterator>::reference>::value, + __is_forward_iterator<_ForwardIterator>::value, iterator >::type insert(const_iterator __position, _ForwardIterator __first, _ForwardIterator __last); @@ -1058,10 +1034,7 @@ template template vector<_Tp, _Allocator>::vector(_InputIterator __first, _InputIterator __last, typename enable_if<__is_input_iterator <_InputIterator>::value && - !__is_forward_iterator<_InputIterator>::value && - is_constructible< - value_type, - typename iterator_traits<_InputIterator>::reference>::value>::type*) + !__is_forward_iterator<_InputIterator>::value>::type*) { #if _LIBCPP_DEBUG_LEVEL >= 2 __get_db()->__insert_c(this); @@ -1074,10 +1047,7 @@ template template vector<_Tp, _Allocator>::vector(_InputIterator __first, _InputIterator __last, const allocator_type& __a, typename enable_if<__is_input_iterator <_InputIterator>::value && - !__is_forward_iterator<_InputIterator>::value && - is_constructible< - value_type, - typename iterator_traits<_InputIterator>::reference>::value>::type*) + !__is_forward_iterator<_InputIterator>::value>::type*) : __base(__a) { #if _LIBCPP_DEBUG_LEVEL >= 2 @@ -1090,10 +1060,7 @@ vector<_Tp, _Allocator>::vector(_InputIterator __first, _InputIterator __last, c template template vector<_Tp, _Allocator>::vector(_ForwardIterator __first, _ForwardIterator __last, - typename enable_if<__is_forward_iterator<_ForwardIterator>::value && - is_constructible< - value_type, - typename iterator_traits<_ForwardIterator>::reference>::value>::type*) + typename enable_if<__is_forward_iterator<_ForwardIterator>::value>::type*) { #if _LIBCPP_DEBUG_LEVEL >= 2 __get_db()->__insert_c(this); @@ -1109,10 +1076,7 @@ vector<_Tp, _Allocator>::vector(_ForwardIterator __first, _ForwardIterator __las template template vector<_Tp, _Allocator>::vector(_ForwardIterator __first, _ForwardIterator __last, const allocator_type& __a, - typename enable_if<__is_forward_iterator<_ForwardIterator>::value && - is_constructible< - value_type, - typename iterator_traits<_ForwardIterator>::reference>::value>::type*) + typename enable_if<__is_forward_iterator<_ForwardIterator>::value>::type*) : __base(__a) { #if _LIBCPP_DEBUG_LEVEL >= 2 @@ -1294,10 +1258,7 @@ template typename enable_if < __is_input_iterator <_InputIterator>::value && - !__is_forward_iterator<_InputIterator>::value && - is_constructible< - _Tp, - typename iterator_traits<_InputIterator>::reference>::value, + !__is_forward_iterator<_InputIterator>::value, void >::type vector<_Tp, _Allocator>::assign(_InputIterator __first, _InputIterator __last) @@ -1311,10 +1272,7 @@ template template typename enable_if < - __is_forward_iterator<_ForwardIterator>::value && - is_constructible< - _Tp, - typename iterator_traits<_ForwardIterator>::reference>::value, + __is_forward_iterator<_ForwardIterator>::value, void >::type vector<_Tp, _Allocator>::assign(_ForwardIterator __first, _ForwardIterator __last) @@ -1795,10 +1753,7 @@ template typename enable_if < __is_input_iterator <_InputIterator>::value && - !__is_forward_iterator<_InputIterator>::value && - is_constructible< - _Tp, - typename iterator_traits<_InputIterator>::reference>::value, + !__is_forward_iterator<_InputIterator>::value, typename vector<_Tp, _Allocator>::iterator >::type vector<_Tp, _Allocator>::insert(const_iterator __position, _InputIterator __first, _InputIterator __last) @@ -1850,10 +1805,7 @@ template template typename enable_if < - __is_forward_iterator<_ForwardIterator>::value && - is_constructible< - _Tp, - typename iterator_traits<_ForwardIterator>::reference>::value, + __is_forward_iterator<_ForwardIterator>::value, typename vector<_Tp, _Allocator>::iterator >::type vector<_Tp, _Allocator>::insert(const_iterator __position, _ForwardIterator __first, _ForwardIterator __last) diff --git a/test/containers/sequences/vector/vector.cons/construct_iter_iter.pass.cpp b/test/containers/sequences/vector/vector.cons/construct_iter_iter.pass.cpp index b0971208..9c9b88e7 100644 --- a/test/containers/sequences/vector/vector.cons/construct_iter_iter.pass.cpp +++ b/test/containers/sequences/vector/vector.cons/construct_iter_iter.pass.cpp @@ -28,10 +28,6 @@ test(Iterator first, Iterator last) assert(*i == *first); } -struct X -{ -}; - int main() { int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 1, 0}; @@ -47,7 +43,4 @@ int main() test > >(bidirectional_iterator(a), bidirectional_iterator(an)); test > >(random_access_iterator(a), random_access_iterator(an)); test > >(a, an); - - X x[2]; - static_assert(!(std::is_constructible, X*, X*>::value), ""); }