Commit 594ef205 by Jonathan Wakely Committed by Jonathan Wakely

Implement P0084R2, Emplace return type, for C++17

	* doc/xml/manual/status_cxx2017.xml: Update status.
	* doc/html/*: Regenerate.
	* include/bits/deque.tcc (deque::emplace_front, deque::emplace_back):
	Return a reference in C++17 mode.
	* include/bits/forward_list.h (forward_list::emplace_front): Likewise.
	* include/bits/stl_bvector.h (vector<bool>::emplace_back): Likewise.
	* include/bits/stl_deque.h (deque::emplace_front, deque::emplace_back):
	Likewise.
	* include/bits/stl_list.h (list::emplace_front, list::emplace_back):
	Likewise.
	* include/bits/stl_queue.h (queue::emplace): Likewise.
	* include/bits/stl_stack.h (stack::emplace): Likewise.
	* include/bits/stl_vector.h (vector::emplace_back): Likewise.
	* include/bits/vector.tcc (vector::emplace_back): Likewise.
	* include/debug/deque (__gnu_debug::deque::emplace_front)
	(__gnu_debug::deque::emplace_back): Likewise.
	* include/debug/vector (__gnu_debug::vector::emplace_back): Likewise.
	* testsuite/23_containers/deque/modifiers/emplace/cxx17_return.cc:
	New.
	* testsuite/23_containers/forward_list/modifiers/
	emplace_cxx17_return.cc: New.
	* testsuite/23_containers/list/modifiers/emplace/cxx17_return.cc: New.
	* testsuite/23_containers/queue/members/emplace_cxx17_return.cc: New.
	* testsuite/23_containers/stack/members/emplace_cxx17_return.cc: New.
	* testsuite/23_containers/vector/bool/emplace_cxx17_return.cc: New.
	* testsuite/23_containers/vector/modifiers/emplace/cxx17_return.cc:
	New.

From-SVN: r241234
parent d47d3849
2016-10-17 Jonathan Wakely <jwakely@redhat.com>
* doc/xml/manual/status_cxx2017.xml: Update status.
* doc/html/*: Regenerate.
* include/bits/deque.tcc (deque::emplace_front, deque::emplace_back):
Return a reference in C++17 mode.
* include/bits/forward_list.h (forward_list::emplace_front): Likewise.
* include/bits/stl_bvector.h (vector<bool>::emplace_back): Likewise.
* include/bits/stl_deque.h (deque::emplace_front, deque::emplace_back):
Likewise.
* include/bits/stl_list.h (list::emplace_front, list::emplace_back):
Likewise.
* include/bits/stl_queue.h (queue::emplace): Likewise.
* include/bits/stl_stack.h (stack::emplace): Likewise.
* include/bits/stl_vector.h (vector::emplace_back): Likewise.
* include/bits/vector.tcc (vector::emplace_back): Likewise.
* include/debug/deque (__gnu_debug::deque::emplace_front)
(__gnu_debug::deque::emplace_back): Likewise.
* include/debug/vector (__gnu_debug::vector::emplace_back): Likewise.
* testsuite/23_containers/deque/modifiers/emplace/cxx17_return.cc:
New.
* testsuite/23_containers/forward_list/modifiers/
emplace_cxx17_return.cc: New.
* testsuite/23_containers/list/modifiers/emplace/cxx17_return.cc: New.
* testsuite/23_containers/queue/members/emplace_cxx17_return.cc: New.
* testsuite/23_containers/stack/members/emplace_cxx17_return.cc: New.
* testsuite/23_containers/vector/bool/emplace_cxx17_return.cc: New.
* testsuite/23_containers/vector/modifiers/emplace/cxx17_return.cc:
New.
2016-10-16 Paolo Carlini <paolo.carlini@oracle.com> 2016-10-16 Paolo Carlini <paolo.carlini@oracle.com>
* testsuite/22_locale/classification/isblank.cc: Remove 'test' * testsuite/22_locale/classification/isblank.cc: Remove 'test'
......
...@@ -706,11 +706,11 @@ Feature-testing recommendations for C++</a>. ...@@ -706,11 +706,11 @@ Feature-testing recommendations for C++</a>.
</a> </a>
</td><td align="center"> 6.2 (3.0)</td><td align="left"><code class="code"> __cpp_lib_incomplete_container_elements &gt;= 201505 </code> </td><td align="center"> 6.2 (3.0)</td><td align="left"><code class="code"> __cpp_lib_incomplete_container_elements &gt;= 201505 </code>
(the feature was always supported, but the macro was not defined until GCC 6.2) (the feature was always supported, but the macro was not defined until GCC 6.2)
</td></tr><tr bgcolor="#C8B0B0"><td align="left"> Emplace return type </td><td align="left"> </td></tr><tr><td align="left"> Emplace return type </td><td align="left">
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf" target="_top"> <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf" target="_top">
P0084R2 P0084R2
</a> </a>
</td><td align="center"> No </td><td align="left"> </td></tr><tr><td align="left">Improved insertion interface for unique-key maps</td><td align="left"> </td><td align="center"> 7 </td><td align="left"> </td></tr><tr><td align="left">Improved insertion interface for unique-key maps</td><td align="left">
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4279.html" target="_top"> <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4279.html" target="_top">
N4279 N4279
</a> </a>
......
...@@ -322,7 +322,7 @@ cat 27_io/objects/char/3_xin.in | a.out</pre></dd><dt><span class="term"><code c ...@@ -322,7 +322,7 @@ cat 27_io/objects/char/3_xin.in | a.out</pre></dd><dt><span class="term"><code c
<span class="command"><strong>make</strong></span>, or via options for the DejaGnu test framework <span class="command"><strong>make</strong></span>, or via options for the DejaGnu test framework
(described below). The latter approach uses the (described below). The latter approach uses the
<code class="option">--target_board</code> option that was shown earlier. <code class="option">--target_board</code> option that was shown earlier.
For example, to run the tests with <code class="option">-O1 -D_GLIBCXX_ASSERT</code> For example, to run the tests with <code class="option">-O1 -D_GLIBCXX_ASSERTIONS</code>
you could use: you could use:
</p><pre class="programlisting"> make RUNTESTFLAGS=--target_board=unix/-O1/-D_GLIBCXX_ASSERTIONS</pre><p> </p><pre class="programlisting"> make RUNTESTFLAGS=--target_board=unix/-O1/-D_GLIBCXX_ASSERTIONS</pre><p>
</p><p> </p><p>
......
...@@ -542,14 +542,13 @@ Feature-testing recommendations for C++</link>. ...@@ -542,14 +542,13 @@ Feature-testing recommendations for C++</link>.
</row> </row>
<row> <row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry> Emplace return type </entry> <entry> Emplace return type </entry>
<entry> <entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf"> <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf">
P0084R2 P0084R2
</link> </link>
</entry> </entry>
<entry align="center"> No </entry> <entry align="center"> 7 </entry>
<entry/> <entry/>
</row> </row>
......
...@@ -129,7 +129,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -129,7 +129,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#if __cplusplus >= 201103L #if __cplusplus >= 201103L
template<typename _Tp, typename _Alloc> template<typename _Tp, typename _Alloc>
template<typename... _Args> template<typename... _Args>
#if __cplusplus > 201402L
typename deque<_Tp, _Alloc>::reference
#else
void void
#endif
deque<_Tp, _Alloc>:: deque<_Tp, _Alloc>::
emplace_front(_Args&&... __args) emplace_front(_Args&&... __args)
{ {
...@@ -142,11 +146,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -142,11 +146,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
} }
else else
_M_push_front_aux(std::forward<_Args>(__args)...); _M_push_front_aux(std::forward<_Args>(__args)...);
#if __cplusplus > 201402L
return front();
#endif
} }
template<typename _Tp, typename _Alloc> template<typename _Tp, typename _Alloc>
template<typename... _Args> template<typename... _Args>
#if __cplusplus > 201402L
typename deque<_Tp, _Alloc>::reference
#else
void void
#endif
deque<_Tp, _Alloc>:: deque<_Tp, _Alloc>::
emplace_back(_Args&&... __args) emplace_back(_Args&&... __args)
{ {
...@@ -160,6 +171,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -160,6 +171,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
} }
else else
_M_push_back_aux(std::forward<_Args>(__args)...); _M_push_back_aux(std::forward<_Args>(__args)...);
#if __cplusplus > 201402L
return back();
#endif
} }
#endif #endif
......
...@@ -797,10 +797,19 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -797,10 +797,19 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
* and references. * and references.
*/ */
template<typename... _Args> template<typename... _Args>
void #if __cplusplus > 201402L
reference
#else
void
#endif
emplace_front(_Args&&... __args) emplace_front(_Args&&... __args)
{ this->_M_insert_after(cbefore_begin(), {
std::forward<_Args>(__args)...); } this->_M_insert_after(cbefore_begin(),
std::forward<_Args>(__args)...);
#if __cplusplus > 201402L
return front();
#endif
}
/** /**
* @brief Add data to the front of the %forward_list. * @brief Add data to the front of the %forward_list.
......
...@@ -1056,9 +1056,18 @@ template<typename _Alloc> ...@@ -1056,9 +1056,18 @@ template<typename _Alloc>
#if __cplusplus >= 201103L #if __cplusplus >= 201103L
template<typename... _Args> template<typename... _Args>
#if __cplusplus > 201402L
reference
#else
void void
#endif
emplace_back(_Args&&... __args) emplace_back(_Args&&... __args)
{ push_back(bool(__args...)); } {
push_back(bool(__args...));
#if __cplusplus > 201402L
return back();
#endif
}
template<typename... _Args> template<typename... _Args>
iterator iterator
......
...@@ -1519,7 +1519,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -1519,7 +1519,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ emplace_front(std::move(__x)); } { emplace_front(std::move(__x)); }
template<typename... _Args> template<typename... _Args>
void #if __cplusplus > 201402L
reference
#else
void
#endif
emplace_front(_Args&&... __args); emplace_front(_Args&&... __args);
#endif #endif
...@@ -1552,7 +1556,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -1552,7 +1556,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ emplace_back(std::move(__x)); } { emplace_back(std::move(__x)); }
template<typename... _Args> template<typename... _Args>
void #if __cplusplus > 201402L
reference
#else
void
#endif
emplace_back(_Args&&... __args); emplace_back(_Args&&... __args);
#endif #endif
......
...@@ -1069,9 +1069,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 ...@@ -1069,9 +1069,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
{ this->_M_insert(begin(), std::move(__x)); } { this->_M_insert(begin(), std::move(__x)); }
template<typename... _Args> template<typename... _Args>
void #if __cplusplus > 201402L
reference
#else
void
#endif
emplace_front(_Args&&... __args) emplace_front(_Args&&... __args)
{ this->_M_insert(begin(), std::forward<_Args>(__args)...); } {
this->_M_insert(begin(), std::forward<_Args>(__args)...);
#if __cplusplus > 201402L
return front();
#endif
}
#endif #endif
/** /**
...@@ -1110,9 +1119,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 ...@@ -1110,9 +1119,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
{ this->_M_insert(end(), std::move(__x)); } { this->_M_insert(end(), std::move(__x)); }
template<typename... _Args> template<typename... _Args>
void #if __cplusplus > 201402L
reference
#else
void
#endif
emplace_back(_Args&&... __args) emplace_back(_Args&&... __args)
{ this->_M_insert(end(), std::forward<_Args>(__args)...); } {
this->_M_insert(end(), std::forward<_Args>(__args)...);
#if __cplusplus > 201402L
return back();
#endif
}
#endif #endif
/** /**
......
...@@ -247,11 +247,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -247,11 +247,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
push(value_type&& __x) push(value_type&& __x)
{ c.push_back(std::move(__x)); } { c.push_back(std::move(__x)); }
#if __cplusplus > 201402L
template<typename... _Args>
decltype(auto)
emplace(_Args&&... __args)
{ return c.emplace_back(std::forward<_Args>(__args)...); }
#else
template<typename... _Args> template<typename... _Args>
void void
emplace(_Args&&... __args) emplace(_Args&&... __args)
{ c.emplace_back(std::forward<_Args>(__args)...); } { c.emplace_back(std::forward<_Args>(__args)...); }
#endif #endif
#endif
/** /**
* @brief Removes first element. * @brief Removes first element.
......
...@@ -223,11 +223,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -223,11 +223,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
push(value_type&& __x) push(value_type&& __x)
{ c.push_back(std::move(__x)); } { c.push_back(std::move(__x)); }
#if __cplusplus > 201402L
template<typename... _Args>
decltype(auto)
emplace(_Args&&... __args)
{ return c.emplace_back(std::forward<_Args>(__args)...); }
#else
template<typename... _Args> template<typename... _Args>
void void
emplace(_Args&&... __args) emplace(_Args&&... __args)
{ c.emplace_back(std::forward<_Args>(__args)...); } { c.emplace_back(std::forward<_Args>(__args)...); }
#endif #endif
#endif
/** /**
* @brief Removes first element. * @brief Removes first element.
......
...@@ -960,7 +960,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -960,7 +960,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{ emplace_back(std::move(__x)); } { emplace_back(std::move(__x)); }
template<typename... _Args> template<typename... _Args>
#if __cplusplus > 201402L
reference
#else
void void
#endif
emplace_back(_Args&&... __args); emplace_back(_Args&&... __args);
#endif #endif
......
...@@ -87,7 +87,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -87,7 +87,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
#if __cplusplus >= 201103L #if __cplusplus >= 201103L
template<typename _Tp, typename _Alloc> template<typename _Tp, typename _Alloc>
template<typename... _Args> template<typename... _Args>
#if __cplusplus > 201402L
typename vector<_Tp, _Alloc>::reference
#else
void void
#endif
vector<_Tp, _Alloc>:: vector<_Tp, _Alloc>::
emplace_back(_Args&&... __args) emplace_back(_Args&&... __args)
{ {
...@@ -99,6 +103,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -99,6 +103,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
} }
else else
_M_realloc_insert(end(), std::forward<_Args>(__args)...); _M_realloc_insert(end(), std::forward<_Args>(__args)...);
#if __cplusplus > 201402L
return back();
#endif
} }
#endif #endif
......
...@@ -386,19 +386,33 @@ namespace __debug ...@@ -386,19 +386,33 @@ namespace __debug
{ emplace_back(std::move(__x)); } { emplace_back(std::move(__x)); }
template<typename... _Args> template<typename... _Args>
#if __cplusplus > 201402L
reference
#else
void void
#endif
emplace_front(_Args&&... __args) emplace_front(_Args&&... __args)
{ {
_Base::emplace_front(std::forward<_Args>(__args)...); _Base::emplace_front(std::forward<_Args>(__args)...);
this->_M_invalidate_all(); this->_M_invalidate_all();
#if __cplusplus > 201402L
return front();
#endif
} }
template<typename... _Args> template<typename... _Args>
#if __cplusplus > 201402L
reference
#else
void void
#endif
emplace_back(_Args&&... __args) emplace_back(_Args&&... __args)
{ {
_Base::emplace_back(std::forward<_Args>(__args)...); _Base::emplace_back(std::forward<_Args>(__args)...);
this->_M_invalidate_all(); this->_M_invalidate_all();
#if __cplusplus > 201402L
return back();
#endif
} }
template<typename... _Args> template<typename... _Args>
......
...@@ -478,7 +478,11 @@ namespace __debug ...@@ -478,7 +478,11 @@ namespace __debug
{ emplace_back(std::move(__x)); } { emplace_back(std::move(__x)); }
template<typename... _Args> template<typename... _Args>
#if __cplusplus > 201402L
deque<_Tp, _Alloc>::reference
#else
void void
#endif
emplace_back(_Args&&... __args) emplace_back(_Args&&... __args)
{ {
bool __realloc = this->_M_requires_reallocation(this->size() + 1); bool __realloc = this->_M_requires_reallocation(this->size() + 1);
...@@ -486,6 +490,9 @@ namespace __debug ...@@ -486,6 +490,9 @@ namespace __debug
if (__realloc) if (__realloc)
this->_M_invalidate_all(); this->_M_invalidate_all();
this->_M_update_guaranteed_capacity(); this->_M_update_guaranteed_capacity();
#if __cplusplus > 201402L
return back();
#endif
} }
#endif #endif
......
// Copyright (C) 2016 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/>.
// { dg-options "-std=gnu++17" }
// { dg-do run { target c++1z } }
#include <deque>
#include <testsuite_hooks.h>
using test_type = std::deque<int>;
void
test01()
{
test_type x{1, 2, 3, 4};
test_type::reference r = x.emplace_front(0);
VERIFY( r == 0 );
VERIFY( &r == &x.front() );
}
void
test02()
{
test_type x{1, 2, 3, 4};
test_type::reference r = x.emplace_back(5);
VERIFY( r == 5 );
VERIFY( &r == &x.back() );
}
int
main()
{
test01();
test02();
}
// Copyright (C) 2016 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/>.
// { dg-options "-std=gnu++17" }
// { dg-do run { target c++1z } }
#include <forward_list>
#include <testsuite_hooks.h>
using test_type = std::forward_list<int>;
void
test01()
{
test_type x{1, 2, 3, 4};
test_type::reference r = x.emplace_front(0);
VERIFY( r == 0 );
VERIFY( &r == &x.front() );
}
int
main()
{
test01();
}
// Copyright (C) 2016 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/>.
// { dg-options "-std=gnu++17" }
// { dg-do run { target c++1z } }
#include <list>
#include <testsuite_hooks.h>
using test_type = std::list<int>;
void
test01()
{
test_type x{1, 2, 3, 4};
test_type::reference r = x.emplace_front(0);
VERIFY( r == 0 );
VERIFY( &r == &x.front() );
}
void
test02()
{
test_type x{1, 2, 3, 4};
test_type::reference r = x.emplace_back(5);
VERIFY( r == 5 );
VERIFY( &r == &x.back() );
}
int
main()
{
test01();
test02();
}
// Copyright (C) 2016 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/>.
// { dg-options "-std=gnu++17" }
// { dg-do run { target c++1z } }
#include <queue>
#include <testsuite_hooks.h>
using test_type = std::queue<int>;
void
test01()
{
test_type x{ test_type::container_type{1, 2, 3, 4} };
test_type::reference r = x.emplace(5);
VERIFY( r == 5 );
VERIFY( &r == &x.back() );
}
int
main()
{
test01();
}
// Copyright (C) 2016 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/>.
// { dg-options "-std=gnu++17" }
// { dg-do run { target c++1z } }
#include <stack>
#include <testsuite_hooks.h>
using test_type = std::stack<int>;
void
test01()
{
test_type x{ test_type::container_type{1, 2, 3, 4} };
test_type::reference r = x.emplace(5);
VERIFY( r == 5 );
VERIFY( &r == &x.top() );
}
int
main()
{
test01();
}
// Copyright (C) 2016 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/>.
// { dg-options "-std=gnu++17" }
// { dg-do run { target c++1z } }
#include <vector>
#include <testsuite_hooks.h>
using test_type = std::vector<bool>;
void
test02()
{
test_type x{true, true};
test_type::reference r = x.emplace_back(false);
VERIFY( r == false );
}
int
main()
{
test02();
}
// Copyright (C) 2016 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/>.
// { dg-options "-std=gnu++17" }
// { dg-do run { target c++1z } }
#include <vector>
#include <testsuite_hooks.h>
using test_type = std::vector<int>;
void
test02()
{
test_type x{1, 2, 3, 4};
test_type::reference r = x.emplace_back(5);
VERIFY( r == 5 );
VERIFY( &r == &x.back() );
}
int
main()
{
test02();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment