summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely.gcc@gmail.com>2013-11-15 16:34:06 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2013-11-15 16:34:06 +0000
commit3aaaa651a9c0090cb79a3258df6705d6204626db (patch)
treed3e4aa95ab3a99279c52268b0b57cd6f07a65882 /libstdc++-v3
parent64e1ab11680d7fe72372d70add25ee519406d3d1 (diff)
downloadgcc-3aaaa651a9c0090cb79a3258df6705d6204626db.tar.gz
stl_bvector.h (vector<bool>::emplace_back()): LWG 2187: Define.
* include/bits/stl_bvector.h (vector<bool>::emplace_back()): LWG 2187: Define. (vector<bool>::emplace()): Likewise. * testsuite/23_containers/vector/bool/emplace.cc: New. From-SVN: r204851
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/include/bits/stl_bvector.h13
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/bool/emplace.cc51
3 files changed, 70 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index c48ff6567aa..923294cc03b 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,10 @@
+2013-11-15 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/stl_bvector.h (vector<bool>::emplace_back()): LWG 2187:
+ Define.
+ (vector<bool>::emplace()): Likewise.
+ * testsuite/23_containers/vector/bool/emplace.cc: New.
+
2013-11-15 Ondřej Bílka <neleai@seznam.cz>
Jonathan Wakely <jwakely.gcc@gmail.com>
diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h
index 8e4b0230614..3b5a0c2b63e 100644
--- a/libstdc++-v3/include/bits/stl_bvector.h
+++ b/libstdc++-v3/include/bits/stl_bvector.h
@@ -971,7 +971,18 @@ template<typename _Alloc>
clear() _GLIBCXX_NOEXCEPT
{ _M_erase_at_end(begin()); }
-
+#if __cplusplus >= 201103L
+ template<typename... _Args>
+ void
+ emplace_back(_Args&&... __args)
+ { push_back(bool(__args...)); }
+
+ template<typename... _Args>
+ iterator
+ emplace(const_iterator __pos, _Args&&... __args)
+ { return insert(__pos, bool(__args...)); }
+#endif
+
protected:
// Precondition: __first._M_offset == 0 && __result._M_offset == 0.
iterator
diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/emplace.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/emplace.cc
new file mode 100644
index 00000000000..f44ea1f235c
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/bool/emplace.cc
@@ -0,0 +1,51 @@
+// { dg-options " -std=gnu++11 " }
+
+// Copyright (C) 2013 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/>.
+
+// 23.3.8 class vector<bool>
+
+#include <vector>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ std::vector<bool> v;
+ v.emplace_back();
+ VERIFY( v[0] == false );
+ v.emplace_back(1);
+ VERIFY( v[1] == true );
+ VERIFY( v.size() == 2 );
+}
+
+void test02()
+{
+ std::vector<bool> v;
+ auto it = v.emplace(v.cbegin());
+ VERIFY( it == v.begin() );
+ VERIFY( *it == false );
+ it = v.emplace(it, 1);
+ VERIFY( it == v.begin() );
+ VERIFY( *it == true );
+ VERIFY( v.size() == 2 );
+}
+
+int main()
+{
+ test01();
+ test02();
+}