mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			safe_iterator.h (_Safe_iterator<>::_M_constant()): Rename in...
2018-05-09  François Dumont  <fdumont@gcc.gnu.org>
	* include/debug/safe_iterator.h (_Safe_iterator<>::_M_constant()):
	Rename in...
	(_Safe_iterator<>::_S_constant()): ...that.
	* include/debug/safe_local_iterator.h
	(_Safe_local_iterator<>::_M_constant()): Rename in...
	(_Safe_local_iterator<>::_S_constant()): ...that.
	* include/debug/formatter.h: Remove bits/cpp_type_traits.h include.
	(_Iterator_state::__rbegin): New.
	(_Iterator_state::__rmiddle): New.
	(_Iterator_state::__rend): New.
	(_Parameter::_Parameter(const _Safe_iterator<>&, const char*,
	_Is_iterator)): Use _Safe_iterator<>::_S_constant. Grab normal underlying
	iterator type.
	(_Parameter::_Parameter(const _Safe_local_iterator<>&, const char*,
	_Is_iterator)): Likewise.
	(_Parameter::_S_reverse_state(_Iterator_state)): New.
        (_Parameter(__gnu_cxx::__normal_iterator<> const&, const char*,
	_Is_iterator)): New.
	(_Parameter(std::reverse_iterator<> const&, const char*,
	_Is_iterator)): New.
	(_Parameter(std::reverse_iterator<_Safe_iterator<>> const&,
	const char*, _Is_iterator)): New.
	(_Parameter(std::move_iterator<> const&, const char*, _Is_iterator):
	New.
	(_Parameter(std::move_iterator<_Safe_iterator<>> const&, const char*,
	_Is_iterator)): New.
	* testsuite/24_iterators/move_iterator/debug_neg.cc: New.
	* testsuite/24_iterators/normal_iterator/debug_neg.cc: New.
	* testsuite/24_iterators/reverse_iterator/debug_neg.cc: New.
From-SVN: r260093
			
			
This commit is contained in:
		
							parent
							
								
									bb6cb6e3e2
								
							
						
					
					
						commit
						6c882d0fdc
					
				|  | @ -1,3 +1,35 @@ | ||||||
|  | 2018-05-09  François Dumont  <fdumont@gcc.gnu.org> | ||||||
|  | 
 | ||||||
|  | 	* include/debug/safe_iterator.h (_Safe_iterator<>::_M_constant()): | ||||||
|  | 	Rename in... | ||||||
|  | 	(_Safe_iterator<>::_S_constant()): ...that. | ||||||
|  | 	* include/debug/safe_local_iterator.h | ||||||
|  | 	(_Safe_local_iterator<>::_M_constant()): Rename in... | ||||||
|  | 	(_Safe_local_iterator<>::_S_constant()): ...that. | ||||||
|  | 	* include/debug/formatter.h: Remove bits/cpp_type_traits.h include. | ||||||
|  | 	(_Iterator_state::__rbegin): New. | ||||||
|  | 	(_Iterator_state::__rmiddle): New. | ||||||
|  | 	(_Iterator_state::__rend): New. | ||||||
|  | 	(_Parameter::_Parameter(const _Safe_iterator<>&, const char*, | ||||||
|  | 	_Is_iterator)): Use _Safe_iterator<>::_S_constant. Grab normal underlying | ||||||
|  | 	iterator type. | ||||||
|  | 	(_Parameter::_Parameter(const _Safe_local_iterator<>&, const char*, | ||||||
|  | 	_Is_iterator)): Likewise. | ||||||
|  | 	(_Parameter::_S_reverse_state(_Iterator_state)): New. | ||||||
|  |         (_Parameter(__gnu_cxx::__normal_iterator<> const&, const char*, | ||||||
|  | 	_Is_iterator)): New. | ||||||
|  | 	(_Parameter(std::reverse_iterator<> const&, const char*, | ||||||
|  | 	_Is_iterator)): New. | ||||||
|  | 	(_Parameter(std::reverse_iterator<_Safe_iterator<>> const&, | ||||||
|  | 	const char*, _Is_iterator)): New. | ||||||
|  | 	(_Parameter(std::move_iterator<> const&, const char*, _Is_iterator): | ||||||
|  | 	New. | ||||||
|  | 	(_Parameter(std::move_iterator<_Safe_iterator<>> const&, const char*, | ||||||
|  | 	_Is_iterator)): New. | ||||||
|  | 	* testsuite/24_iterators/move_iterator/debug_neg.cc: New. | ||||||
|  | 	* testsuite/24_iterators/normal_iterator/debug_neg.cc: New. | ||||||
|  | 	* testsuite/24_iterators/reverse_iterator/debug_neg.cc: New. | ||||||
|  | 
 | ||||||
| 2018-05-09  Jonathan Wakely  <jwakely@redhat.com> | 2018-05-09  Jonathan Wakely  <jwakely@redhat.com> | ||||||
| 
 | 
 | ||||||
| 	* include/bits/std_function.h (_Base_manager::_M_get_pointer): | 	* include/bits/std_function.h (_Base_manager::_M_get_pointer): | ||||||
|  |  | ||||||
|  | @ -30,7 +30,6 @@ | ||||||
| #define _GLIBCXX_DEBUG_FORMATTER_H 1 | #define _GLIBCXX_DEBUG_FORMATTER_H 1 | ||||||
| 
 | 
 | ||||||
| #include <bits/c++config.h> | #include <bits/c++config.h> | ||||||
| #include <bits/cpp_type_traits.h> |  | ||||||
| 
 | 
 | ||||||
| #if __cpp_rtti | #if __cpp_rtti | ||||||
| # include <typeinfo> | # include <typeinfo> | ||||||
|  | @ -43,6 +42,31 @@ namespace std | ||||||
| # define _GLIBCXX_TYPEID(_Type) 0 | # define _GLIBCXX_TYPEID(_Type) 0 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | #if __cplusplus >= 201103L | ||||||
|  | namespace __gnu_cxx | ||||||
|  | { | ||||||
|  | _GLIBCXX_BEGIN_NAMESPACE_VERSION | ||||||
|  | 
 | ||||||
|  | template<typename _Iterator, typename _Container> | ||||||
|  |   class __normal_iterator; | ||||||
|  | 
 | ||||||
|  | _GLIBCXX_END_NAMESPACE_VERSION | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | namespace std | ||||||
|  | { | ||||||
|  | _GLIBCXX_BEGIN_NAMESPACE_VERSION | ||||||
|  | 
 | ||||||
|  | template<typename _Iterator> | ||||||
|  |   class reverse_iterator; | ||||||
|  | 
 | ||||||
|  | template<typename _Iterator> | ||||||
|  |   class move_iterator; | ||||||
|  | 
 | ||||||
|  | _GLIBCXX_END_NAMESPACE_VERSION | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| namespace __gnu_debug | namespace __gnu_debug | ||||||
| { | { | ||||||
|   using std::type_info; |   using std::type_info; | ||||||
|  | @ -157,6 +181,9 @@ namespace __gnu_debug | ||||||
|       __middle,		// dereferenceable, not at the beginning
 |       __middle,		// dereferenceable, not at the beginning
 | ||||||
|       __end,		// past-the-end, may be at beginning if sequence empty
 |       __end,		// past-the-end, may be at beginning if sequence empty
 | ||||||
|       __before_begin,	// before begin
 |       __before_begin,	// before begin
 | ||||||
|  |       __rbegin,		// dereferenceable, and at the reverse-beginning
 | ||||||
|  |       __rmiddle,	// reverse-dereferenceable, not at the reverse-beginning
 | ||||||
|  |       __rend,		// reverse-past-the-end
 | ||||||
|       __last_state |       __last_state | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  | @ -243,11 +270,9 @@ namespace __gnu_debug | ||||||
| 	{ | 	{ | ||||||
| 	  _M_variant._M_iterator._M_name = __name; | 	  _M_variant._M_iterator._M_name = __name; | ||||||
| 	  _M_variant._M_iterator._M_address = std::__addressof(__it); | 	  _M_variant._M_iterator._M_address = std::__addressof(__it); | ||||||
| 	  _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it); | 	  _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(_Iterator); | ||||||
| 	  _M_variant._M_iterator._M_constness = | 	  _M_variant._M_iterator._M_constness = | ||||||
| 	    std::__are_same<_Safe_iterator<_Iterator, _Sequence>, | 	    __it._S_constant() ? __const_iterator : __mutable_iterator; | ||||||
| 			    typename _Sequence::iterator>:: |  | ||||||
| 	      __value ? __mutable_iterator : __const_iterator; |  | ||||||
| 	  _M_variant._M_iterator._M_sequence = __it._M_get_sequence(); | 	  _M_variant._M_iterator._M_sequence = __it._M_get_sequence(); | ||||||
| 	  _M_variant._M_iterator._M_seq_type = _GLIBCXX_TYPEID(_Sequence); | 	  _M_variant._M_iterator._M_seq_type = _GLIBCXX_TYPEID(_Sequence); | ||||||
| 
 | 
 | ||||||
|  | @ -273,11 +298,10 @@ namespace __gnu_debug | ||||||
| 	{ | 	{ | ||||||
| 	  _M_variant._M_iterator._M_name = __name; | 	  _M_variant._M_iterator._M_name = __name; | ||||||
| 	  _M_variant._M_iterator._M_address = std::__addressof(__it); | 	  _M_variant._M_iterator._M_address = std::__addressof(__it); | ||||||
| 	  _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it); | 	  _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(_Iterator); | ||||||
| 	  _M_variant._M_iterator._M_constness = | 	  _M_variant._M_iterator._M_constness = | ||||||
| 	    std::__are_same<_Safe_local_iterator<_Iterator, _Sequence>, | 	  _M_variant._M_iterator._M_constness = | ||||||
| 			    typename _Sequence::local_iterator>:: | 	    __it._S_constant() ? __const_iterator : __mutable_iterator; | ||||||
| 	      __value ? __mutable_iterator : __const_iterator; |  | ||||||
| 	  _M_variant._M_iterator._M_sequence = __it._M_get_sequence(); | 	  _M_variant._M_iterator._M_sequence = __it._M_get_sequence(); | ||||||
| 	  _M_variant._M_iterator._M_seq_type = _GLIBCXX_TYPEID(_Sequence); | 	  _M_variant._M_iterator._M_seq_type = _GLIBCXX_TYPEID(_Sequence); | ||||||
| 
 | 
 | ||||||
|  | @ -334,6 +358,74 @@ namespace __gnu_debug | ||||||
| 	  _M_variant._M_iterator._M_seq_type = 0; | 	  _M_variant._M_iterator._M_seq_type = 0; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | #if __cplusplus >= 201103L | ||||||
|  |       // The following constructors are only defined in C++11 to take
 | ||||||
|  |       // advantage of the constructor delegation feature.
 | ||||||
|  |       template<typename _Iterator, typename _Container> | ||||||
|  |         _Parameter( | ||||||
|  | 	  __gnu_cxx::__normal_iterator<_Iterator, _Container> const& __it, | ||||||
|  | 	const char* __name, _Is_iterator) | ||||||
|  | 	: _Parameter(__it.base(), __name, _Is_iterator{}) | ||||||
|  | 	{ _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it); } | ||||||
|  | 
 | ||||||
|  |       template<typename _Iterator> | ||||||
|  | 	_Parameter(std::reverse_iterator<_Iterator> const& __it, | ||||||
|  | 		   const char* __name, _Is_iterator) | ||||||
|  | 	: _Parameter(__it.base(), __name, _Is_iterator{}) | ||||||
|  | 	{ | ||||||
|  | 	  _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it); | ||||||
|  | 	  _M_variant._M_iterator._M_state | ||||||
|  | 	    = _S_reverse_state(_M_variant._M_iterator._M_state); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  |       template<typename _Iterator, typename _Sequence> | ||||||
|  | 	_Parameter(std::reverse_iterator<_Safe_iterator<_Iterator, | ||||||
|  | 							_Sequence>> const& __it, | ||||||
|  | 		   const char* __name, _Is_iterator) | ||||||
|  | 	: _Parameter(__it.base(), __name, _Is_iterator{}) | ||||||
|  | 	{ | ||||||
|  | 	  _M_variant._M_iterator._M_type | ||||||
|  | 	    = _GLIBCXX_TYPEID(std::reverse_iterator<_Iterator>); | ||||||
|  | 	  _M_variant._M_iterator._M_state | ||||||
|  | 	    = _S_reverse_state(_M_variant._M_iterator._M_state); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  |       template<typename _Iterator> | ||||||
|  | 	_Parameter(std::move_iterator<_Iterator> const& __it, | ||||||
|  | 		   const char* __name, _Is_iterator) | ||||||
|  | 	: _Parameter(__it.base(), __name, _Is_iterator{}) | ||||||
|  | 	{ _M_variant._M_iterator._M_type = _GLIBCXX_TYPEID(__it); } | ||||||
|  | 
 | ||||||
|  |       template<typename _Iterator, typename _Sequence> | ||||||
|  | 	_Parameter(std::move_iterator<_Safe_iterator<_Iterator, | ||||||
|  | 						     _Sequence>> const& __it, | ||||||
|  | 		   const char* __name, _Is_iterator) | ||||||
|  | 	: _Parameter(__it.base(), __name, _Is_iterator{}) | ||||||
|  |       { | ||||||
|  | 	_M_variant._M_iterator._M_type | ||||||
|  | 	  = _GLIBCXX_TYPEID(std::move_iterator<_Iterator>); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |     private: | ||||||
|  |       _Iterator_state | ||||||
|  |       _S_reverse_state(_Iterator_state __state) | ||||||
|  |       { | ||||||
|  | 	  switch (__state) | ||||||
|  | 	    { | ||||||
|  | 	    case __begin: | ||||||
|  | 	      return __rend; | ||||||
|  | 	    case __middle: | ||||||
|  | 	      return __rmiddle; | ||||||
|  | 	    case __end: | ||||||
|  | 	      return __rbegin; | ||||||
|  | 	    default: | ||||||
|  | 	      return __state; | ||||||
|  | 	    } | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |     public: | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|       template<typename _Sequence> |       template<typename _Sequence> | ||||||
| 	_Parameter(const _Safe_sequence<_Sequence>& __seq, | 	_Parameter(const _Safe_sequence<_Sequence>& __seq, | ||||||
| 		   const char* __name, _Is_sequence) | 		   const char* __name, _Is_sequence) | ||||||
|  |  | ||||||
|  | @ -91,11 +91,6 @@ namespace __gnu_debug | ||||||
|       typedef _Safe_iterator_base _Safe_base; |       typedef _Safe_iterator_base _Safe_base; | ||||||
|       typedef typename _Sequence::const_iterator _Const_iterator; |       typedef typename _Sequence::const_iterator _Const_iterator; | ||||||
| 
 | 
 | ||||||
|       /// Determine if this is a constant iterator.
 |  | ||||||
|       bool |  | ||||||
|       _M_constant() const |  | ||||||
|       { return std::__are_same<_Const_iterator, _Safe_iterator>::__value; } |  | ||||||
| 
 |  | ||||||
|       typedef std::iterator_traits<_Iterator> _Traits; |       typedef std::iterator_traits<_Iterator> _Traits; | ||||||
| 
 | 
 | ||||||
|       struct _Attach_single |       struct _Attach_single | ||||||
|  | @ -127,7 +122,7 @@ namespace __gnu_debug | ||||||
|        */ |        */ | ||||||
|       _Safe_iterator(const _Iterator& __i, const _Safe_sequence_base* __seq) |       _Safe_iterator(const _Iterator& __i, const _Safe_sequence_base* __seq) | ||||||
|       _GLIBCXX_NOEXCEPT |       _GLIBCXX_NOEXCEPT | ||||||
|       : _Iter_base(__i), _Safe_base(__seq, _M_constant()) |       : _Iter_base(__i), _Safe_base(__seq, _S_constant()) | ||||||
|       { |       { | ||||||
| 	_GLIBCXX_DEBUG_VERIFY(!this->_M_singular(), | 	_GLIBCXX_DEBUG_VERIFY(!this->_M_singular(), | ||||||
| 			      _M_message(__msg_init_singular) | 			      _M_message(__msg_init_singular) | ||||||
|  | @ -396,6 +391,12 @@ namespace __gnu_debug | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       // ------ Utilities ------
 |       // ------ Utilities ------
 | ||||||
|  | 
 | ||||||
|  |       /// Determine if this is a constant iterator.
 | ||||||
|  |       static bool | ||||||
|  |       _S_constant() | ||||||
|  |       { return std::__are_same<_Const_iterator, _Safe_iterator>::__value; } | ||||||
|  | 
 | ||||||
|       /**
 |       /**
 | ||||||
|        * @brief Return the underlying iterator |        * @brief Return the underlying iterator | ||||||
|        */ |        */ | ||||||
|  | @ -414,12 +415,12 @@ namespace __gnu_debug | ||||||
|       /** Attach iterator to the given sequence. */ |       /** Attach iterator to the given sequence. */ | ||||||
|       void |       void | ||||||
|       _M_attach(_Safe_sequence_base* __seq) |       _M_attach(_Safe_sequence_base* __seq) | ||||||
|       { _Safe_base::_M_attach(__seq, _M_constant()); } |       { _Safe_base::_M_attach(__seq, _S_constant()); } | ||||||
| 
 | 
 | ||||||
|       /** Likewise, but not thread-safe. */ |       /** Likewise, but not thread-safe. */ | ||||||
|       void |       void | ||||||
|       _M_attach_single(_Safe_sequence_base* __seq) |       _M_attach_single(_Safe_sequence_base* __seq) | ||||||
|       { _Safe_base::_M_attach_single(__seq, _M_constant()); } |       { _Safe_base::_M_attach_single(__seq, _S_constant()); } | ||||||
| 
 | 
 | ||||||
|       /// Is the iterator dereferenceable?
 |       /// Is the iterator dereferenceable?
 | ||||||
|       bool |       bool | ||||||
|  |  | ||||||
|  | @ -54,14 +54,6 @@ namespace __gnu_debug | ||||||
|       typedef typename _Sequence::const_local_iterator _Const_local_iterator; |       typedef typename _Sequence::const_local_iterator _Const_local_iterator; | ||||||
|       typedef typename _Sequence::size_type size_type; |       typedef typename _Sequence::size_type size_type; | ||||||
| 
 | 
 | ||||||
|       /// Determine if this is a constant iterator.
 |  | ||||||
|       bool |  | ||||||
|       _M_constant() const |  | ||||||
|       { |  | ||||||
| 	return std::__are_same<_Const_local_iterator, |  | ||||||
| 			       _Safe_local_iterator>::__value; |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       typedef std::iterator_traits<_Iterator> _Traits; |       typedef std::iterator_traits<_Iterator> _Traits; | ||||||
| 
 | 
 | ||||||
|       struct _Attach_single |       struct _Attach_single | ||||||
|  | @ -92,7 +84,7 @@ namespace __gnu_debug | ||||||
|        */ |        */ | ||||||
|       _Safe_local_iterator(const _Iterator& __i, |       _Safe_local_iterator(const _Iterator& __i, | ||||||
| 			   const _Safe_sequence_base* __cont) | 			   const _Safe_sequence_base* __cont) | ||||||
|       : _Iter_base(__i), _Safe_base(__cont, _M_constant()) |       : _Iter_base(__i), _Safe_base(__cont, _S_constant()) | ||||||
|       { |       { | ||||||
| 	_GLIBCXX_DEBUG_VERIFY(!this->_M_singular(), | 	_GLIBCXX_DEBUG_VERIFY(!this->_M_singular(), | ||||||
| 			      _M_message(__msg_init_singular) | 			      _M_message(__msg_init_singular) | ||||||
|  | @ -278,6 +270,15 @@ namespace __gnu_debug | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       // ------ Utilities ------
 |       // ------ Utilities ------
 | ||||||
|  | 
 | ||||||
|  |       /// Determine if this is a constant iterator.
 | ||||||
|  |       static bool | ||||||
|  |       _S_constant() | ||||||
|  |       { | ||||||
|  | 	return std::__are_same<_Const_local_iterator, | ||||||
|  | 			       _Safe_local_iterator>::__value; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|       /**
 |       /**
 | ||||||
|        * @brief Return the underlying iterator |        * @brief Return the underlying iterator | ||||||
|        */ |        */ | ||||||
|  | @ -302,12 +303,12 @@ namespace __gnu_debug | ||||||
|       /** Attach iterator to the given sequence. */ |       /** Attach iterator to the given sequence. */ | ||||||
|       void |       void | ||||||
|       _M_attach(_Safe_sequence_base* __seq) |       _M_attach(_Safe_sequence_base* __seq) | ||||||
|       { _Safe_base::_M_attach(__seq, _M_constant()); } |       { _Safe_base::_M_attach(__seq, _S_constant()); } | ||||||
| 
 | 
 | ||||||
|       /** Likewise, but not thread-safe. */ |       /** Likewise, but not thread-safe. */ | ||||||
|       void |       void | ||||||
|       _M_attach_single(_Safe_sequence_base* __seq) |       _M_attach_single(_Safe_sequence_base* __seq) | ||||||
|       { _Safe_base::_M_attach_single(__seq, _M_constant()); } |       { _Safe_base::_M_attach_single(__seq, _S_constant()); } | ||||||
| 
 | 
 | ||||||
|       /// Is the iterator dereferenceable?
 |       /// Is the iterator dereferenceable?
 | ||||||
|       bool |       bool | ||||||
|  |  | ||||||
|  | @ -720,7 +720,10 @@ namespace | ||||||
| 		"dereferenceable (start-of-sequence)", | 		"dereferenceable (start-of-sequence)", | ||||||
| 		"dereferenceable", | 		"dereferenceable", | ||||||
| 		"past-the-end", | 		"past-the-end", | ||||||
| 		"before-begin" | 		"before-begin", | ||||||
|  | 		"dereferenceable (start-of-reverse-sequence)", | ||||||
|  | 		"dereferenceable (reverse)", | ||||||
|  | 		"past-the-reverse-end" | ||||||
| 	      }; | 	      }; | ||||||
| 	    print_word(ctx, state_names[iterator._M_state]); | 	    print_word(ctx, state_names[iterator._M_state]); | ||||||
| 	  } | 	  } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,34 @@ | ||||||
|  | // { dg-do run { target c++11 xfail *-*-* } }
 | ||||||
|  | 
 | ||||||
|  | // Copyright (C) 2018 Free Software Foundation, Inc.
 | ||||||
|  | //
 | ||||||
|  | // This file is part of the GNU ISO C++ Library.  This library is free
 | ||||||
|  | // software; you can redistribute it and/or modify it under the
 | ||||||
|  | // terms of the GNU General Public License as published by the
 | ||||||
|  | // Free Software Foundation; either version 3, or (at your option)
 | ||||||
|  | // any later version.
 | ||||||
|  | 
 | ||||||
|  | // This library is distributed in the hope that it will be useful,
 | ||||||
|  | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||||||
|  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||||||
|  | // GNU General Public License for more details.
 | ||||||
|  | 
 | ||||||
|  | // You should have received a copy of the GNU General Public License along
 | ||||||
|  | // with this library; see the file COPYING3.  If not see
 | ||||||
|  | // <http://www.gnu.org/licenses/>.
 | ||||||
|  | 
 | ||||||
|  | #include <debug/vector> | ||||||
|  | #include <iterator> | ||||||
|  | 
 | ||||||
|  | void test01() | ||||||
|  | { | ||||||
|  |   __gnu_debug::vector<int> vals { 0, 1, 2, 3 }; | ||||||
|  |   __gnu_debug::vector<int> mval(std::make_move_iterator(vals.begin() + 1), | ||||||
|  | 				std::make_move_iterator(vals.begin())); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int main() | ||||||
|  | { | ||||||
|  |   test01(); | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  | @ -0,0 +1,34 @@ | ||||||
|  | // Copyright (C) 2018 Free Software Foundation, Inc.
 | ||||||
|  | //
 | ||||||
|  | // This file is part of the GNU ISO C++ Library.  This library is free
 | ||||||
|  | // software; you can redistribute it and/or modify it under the
 | ||||||
|  | // terms of the GNU General Public License as published by the
 | ||||||
|  | // Free Software Foundation; either version 3, or (at your option)
 | ||||||
|  | // any later version.
 | ||||||
|  | 
 | ||||||
|  | // This library is distributed in the hope that it will be useful,
 | ||||||
|  | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||||||
|  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||||||
|  | // GNU General Public License for more details.
 | ||||||
|  | 
 | ||||||
|  | // You should have received a copy of the GNU General Public License along
 | ||||||
|  | // with this library; see the file COPYING3.  If not see
 | ||||||
|  | // <http://www.gnu.org/licenses/>.
 | ||||||
|  | 
 | ||||||
|  | // Requires C++11 because we check for correct output of
 | ||||||
|  | // __gnu_cxx::__normal_iterator which is improved in this mode.
 | ||||||
|  | // { dg-do run { target c++11 xfail *-*-* } }
 | ||||||
|  | 
 | ||||||
|  | #include <debug/vector> | ||||||
|  | 
 | ||||||
|  | void test01() | ||||||
|  | { | ||||||
|  |   std::vector<int> vals { 0, 1, 2, 3 }; | ||||||
|  |   __gnu_debug::vector<int> vals2(vals.begin() + 1, vals.begin()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int main() | ||||||
|  | { | ||||||
|  |   test01(); | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  | @ -0,0 +1,34 @@ | ||||||
|  | // Copyright (C) 2018 Free Software Foundation, Inc.
 | ||||||
|  | //
 | ||||||
|  | // This file is part of the GNU ISO C++ Library.  This library is free
 | ||||||
|  | // software; you can redistribute it and/or modify it under the
 | ||||||
|  | // terms of the GNU General Public License as published by the
 | ||||||
|  | // Free Software Foundation; either version 3, or (at your option)
 | ||||||
|  | // any later version.
 | ||||||
|  | 
 | ||||||
|  | // This library is distributed in the hope that it will be useful,
 | ||||||
|  | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||||||
|  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||||||
|  | // GNU General Public License for more details.
 | ||||||
|  | 
 | ||||||
|  | // You should have received a copy of the GNU General Public License along
 | ||||||
|  | // with this library; see the file COPYING3.  If not see
 | ||||||
|  | // <http://www.gnu.org/licenses/>.
 | ||||||
|  | 
 | ||||||
|  | // Requires C++11 because we check for correct output of
 | ||||||
|  | // std::reverse_iterator which is improved only in this mode.
 | ||||||
|  | // { dg-do run { target c++11 xfail *-*-* } }
 | ||||||
|  | 
 | ||||||
|  | #include <debug/vector> | ||||||
|  | 
 | ||||||
|  | void test01() | ||||||
|  | { | ||||||
|  |   __gnu_debug::vector<int> vals { 0, 1, 2, 3 }; | ||||||
|  |   __gnu_debug::vector<int> vals2(vals.rend(), vals.rbegin()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int main() | ||||||
|  | { | ||||||
|  |   test01(); | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	 François Dumont
						François Dumont