aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely.gcc@gmail.com>2012-11-06 00:06:42 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2012-11-06 00:06:42 +0000
commit3c7d8b035a57419b706d0855e14d5b50b565ed7e (patch)
treea0c6c1ab914365cdd8c1d0ced44ef0e6d6774e1a
parent9052f54ccb2851e9814e86b40f4442411c96d822 (diff)
downloadgcc-3c7d8b035a57419b706d0855e14d5b50b565ed7e.zip
gcc-3c7d8b035a57419b706d0855e14d5b50b565ed7e.tar.gz
gcc-3c7d8b035a57419b706d0855e14d5b50b565ed7e.tar.bz2
deque: Constrain InputIterator parameters.
* include/profile/deque: Constrain InputIterator parameters. * include/profile/forward_list: Likewise. * include/profile/list: Likewise. * include/profile/map.h: Likewise. * include/profile/multimap.h: Likewise. * include/profile/set.h: Likewise. * include/profile/multiset.h: Likewise. * include/profile/vector: Likewise. From-SVN: r193196
-rw-r--r--libstdc++-v3/ChangeLog11
-rw-r--r--libstdc++-v3/include/profile/deque23
-rw-r--r--libstdc++-v3/include/profile/forward_list3
-rw-r--r--libstdc++-v3/include/profile/list28
-rw-r--r--libstdc++-v3/include/profile/map.h12
-rw-r--r--libstdc++-v3/include/profile/multimap.h10
-rw-r--r--libstdc++-v3/include/profile/multiset.h12
-rw-r--r--libstdc++-v3/include/profile/set.h14
-rw-r--r--libstdc++-v3/include/profile/vector16
9 files changed, 111 insertions, 18 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 4938ace..3164b03 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,16 @@
2012-11-05 Jonathan Wakely <jwakely.gcc@gmail.com>
+ * include/profile/deque: Constrain InputIterator parameters.
+ * include/profile/forward_list: Likewise.
+ * include/profile/list: Likewise.
+ * include/profile/map.h: Likewise.
+ * include/profile/multimap.h: Likewise.
+ * include/profile/set.h: Likewise.
+ * include/profile/multiset.h: Likewise.
+ * include/profile/vector: Likewise.
+
+2012-11-05 Jonathan Wakely <jwakely.gcc@gmail.com>
+
* include/profile/forward_list: Update to meet allocator-aware
requirements.
* include/debug/forward_list: Likewise.
diff --git a/libstdc++-v3/include/profile/deque b/libstdc++-v3/include/profile/deque
index 48a18c9..99cc465 100644
--- a/libstdc++-v3/include/profile/deque
+++ b/libstdc++-v3/include/profile/deque
@@ -1,6 +1,6 @@
// Profiling deque implementation -*- C++ -*-
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009-2012 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
@@ -79,7 +79,12 @@ namespace __profile
: _Base(__n, __value, __a) { }
#endif
- template<class _InputIterator>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
+ template<typename _InputIterator>
+#endif
deque(_InputIterator __first, _InputIterator __last,
const _Allocator& __a = _Allocator())
: _Base(__first, __last, __a)
@@ -129,7 +134,12 @@ namespace __profile
}
#endif
- template<class _InputIterator>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
+ template<typename _InputIterator>
+#endif
void
assign(_InputIterator __first, _InputIterator __last)
{
@@ -343,7 +353,12 @@ namespace __profile
_Base::insert(__position, __n, __x);
}
- template<class _InputIterator>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
+ template<typename _InputIterator>
+#endif
void
insert(iterator __position,
_InputIterator __first, _InputIterator __last)
diff --git a/libstdc++-v3/include/profile/forward_list b/libstdc++-v3/include/profile/forward_list
index a44ea7a..9cb5820 100644
--- a/libstdc++-v3/include/profile/forward_list
+++ b/libstdc++-v3/include/profile/forward_list
@@ -77,7 +77,8 @@ namespace __profile
: _Base(__n, __value, __al)
{ }
- template<typename _InputIterator>
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
forward_list(_InputIterator __first, _InputIterator __last,
const _Alloc& __al = _Alloc())
: _Base(__first, __last, __al)
diff --git a/libstdc++-v3/include/profile/list b/libstdc++-v3/include/profile/list
index 33b1ae6..2f8535e 100644
--- a/libstdc++-v3/include/profile/list
+++ b/libstdc++-v3/include/profile/list
@@ -1,6 +1,6 @@
// Profiling list implementation -*- C++ -*-
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009-2012 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
@@ -99,7 +99,12 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
}
#endif
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
template<class _InputIterator>
+#endif
list(_InputIterator __first, _InputIterator __last,
const _Allocator& __a = _Allocator())
: _Base(__first, __last, __a)
@@ -171,7 +176,12 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
{ _Base::assign(__l); }
#endif
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
template<class _InputIterator>
+#endif
void
assign(_InputIterator __first, _InputIterator __last)
{ _Base::assign(__first, __last); }
@@ -328,7 +338,8 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
emplace(iterator __position, _Args&&... __args)
{
return iterator(_Base::emplace(__position.base(),
- std::forward<_Args>(__args)...));
+ std::forward<_Args>(__args)...),
+ this);
}
#endif
@@ -363,14 +374,19 @@ template<typename _Tp, typename _Allocator = std::allocator<_Tp> >
_Base::insert(__position.base(), __n, __x);
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
template<class _InputIterator>
+#endif
void
insert(iterator __position, _InputIterator __first,
_InputIterator __last)
- {
- _M_profile_insert(this, __position, size());
- _Base::insert(__position.base(), __first, __last);
- }
+ {
+ _M_profile_insert(this, __position, size());
+ _Base::insert(__position.base(), __first, __last);
+ }
iterator
erase(iterator __position)
diff --git a/libstdc++-v3/include/profile/map.h b/libstdc++-v3/include/profile/map.h
index dcc6931..fe2f456 100644
--- a/libstdc++-v3/include/profile/map.h
+++ b/libstdc++-v3/include/profile/map.h
@@ -69,7 +69,12 @@ namespace __profile
: _Base(__comp, __a)
{ __profcxx_map_to_unordered_map_construct(this); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
template<typename _InputIterator>
+#endif
map(_InputIterator __first, _InputIterator __last,
const _Compare& __comp = _Compare(),
const _Allocator& __a = _Allocator())
@@ -252,7 +257,7 @@ namespace __profile
emplace_hint(const_iterator __pos, _Args&&... __args)
{
size_type size_before = size();
- auto __res = _Base::emplace_hint(__pos.base(),
+ auto __res = _Base::emplace_hint(__pos,
std::forward<_Args>(__args)...);
__profcxx_map_to_unordered_map_insert(this, size_before,
size() - size_before);
@@ -326,7 +331,12 @@ namespace __profile
}
#endif
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
template<typename _InputIterator>
+#endif
void
insert(_InputIterator __first, _InputIterator __last)
{
diff --git a/libstdc++-v3/include/profile/multimap.h b/libstdc++-v3/include/profile/multimap.h
index 2268161..42662af 100644
--- a/libstdc++-v3/include/profile/multimap.h
+++ b/libstdc++-v3/include/profile/multimap.h
@@ -68,7 +68,12 @@ namespace __profile
const _Allocator& __a = _Allocator())
: _Base(__comp, __a) { }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
template<typename _InputIterator>
+#endif
multimap(_InputIterator __first, _InputIterator __last,
const _Compare& __comp = _Compare(),
const _Allocator& __a = _Allocator())
@@ -234,7 +239,12 @@ namespace __profile
std::forward<_Pair>(__x))); }
#endif
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
template<typename _InputIterator>
+#endif
void
insert(_InputIterator __first, _InputIterator __last)
{ _Base::insert(__first, __last); }
diff --git a/libstdc++-v3/include/profile/multiset.h b/libstdc++-v3/include/profile/multiset.h
index f76b4fa..3588797 100644
--- a/libstdc++-v3/include/profile/multiset.h
+++ b/libstdc++-v3/include/profile/multiset.h
@@ -1,6 +1,6 @@
// Profiling multiset implementation -*- C++ -*-
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009-2012 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
@@ -68,7 +68,12 @@ namespace __profile
const _Allocator& __a = _Allocator())
: _Base(__comp, __a) { }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
template<typename _InputIterator>
+#endif
multiset(_InputIterator __first, _InputIterator __last,
const _Compare& __comp = _Compare(),
const _Allocator& __a = _Allocator())
@@ -215,7 +220,12 @@ namespace __profile
{ return iterator(_Base::insert(__position, std::move(__x))); }
#endif
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
template<typename _InputIterator>
+#endif
void
insert(_InputIterator __first, _InputIterator __last)
{ _Base::insert(__first, __last); }
diff --git a/libstdc++-v3/include/profile/set.h b/libstdc++-v3/include/profile/set.h
index c0aa180..5aadab8 100644
--- a/libstdc++-v3/include/profile/set.h
+++ b/libstdc++-v3/include/profile/set.h
@@ -1,6 +1,6 @@
// Profiling set implementation -*- C++ -*-
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009-2012 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
@@ -68,7 +68,12 @@ namespace __profile
const _Allocator& __a = _Allocator())
: _Base(__comp, __a) { }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
template<typename _InputIterator>
+#endif
set(_InputIterator __first, _InputIterator __last,
const _Compare& __comp = _Compare(),
const _Allocator& __a = _Allocator())
@@ -230,7 +235,12 @@ namespace __profile
{ return iterator(_Base::insert(__position, std::move(__x))); }
#endif
- template <typename _InputIterator>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
+ template<typename _InputIterator>
+#endif
void
insert(_InputIterator __first, _InputIterator __last)
{ _Base::insert(__first, __last); }
diff --git a/libstdc++-v3/include/profile/vector b/libstdc++-v3/include/profile/vector
index 8a3e681..fcd6962 100644
--- a/libstdc++-v3/include/profile/vector
+++ b/libstdc++-v3/include/profile/vector
@@ -1,6 +1,6 @@
// Profiling vector implementation -*- C++ -*-
-// Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2009-2012 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
@@ -109,7 +109,12 @@ namespace __profile
}
#endif
- template<class _InputIterator>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
+ template<typename _InputIterator>
+#endif
vector(_InputIterator __first, _InputIterator __last,
const _Allocator& __a = _Allocator())
: _Base(__first, __last, __a)
@@ -401,7 +406,12 @@ namespace __profile
_M_profile_resize(this, __old_size, this->capacity());
}
- template<class _InputIterator>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _InputIterator,
+ typename = std::_RequireInputIter<_InputIterator>>
+#else
+ template<typename _InputIterator>
+#endif
void
insert(iterator __position,
_InputIterator __first, _InputIterator __last)