Implement P0084r2. Changing emplace return types.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@276230 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -110,8 +110,8 @@ public:
|
|||||||
void push_front(value_type&& v);
|
void push_front(value_type&& v);
|
||||||
void push_back(const value_type& v);
|
void push_back(const value_type& v);
|
||||||
void push_back(value_type&& v);
|
void push_back(value_type&& v);
|
||||||
template <class... Args> void emplace_front(Args&&... args);
|
template <class... Args> reference emplace_front(Args&&... args);
|
||||||
template <class... Args> void emplace_back(Args&&... args);
|
template <class... Args> reference emplace_back(Args&&... args);
|
||||||
template <class... Args> iterator emplace(const_iterator p, Args&&... args);
|
template <class... Args> iterator emplace(const_iterator p, Args&&... args);
|
||||||
iterator insert(const_iterator p, const value_type& v);
|
iterator insert(const_iterator p, const value_type& v);
|
||||||
iterator insert(const_iterator p, value_type&& v);
|
iterator insert(const_iterator p, value_type&& v);
|
||||||
@@ -1344,8 +1344,8 @@ public:
|
|||||||
void push_back(const value_type& __v);
|
void push_back(const value_type& __v);
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||||
#ifndef _LIBCPP_HAS_NO_VARIADICS
|
#ifndef _LIBCPP_HAS_NO_VARIADICS
|
||||||
template <class... _Args> void emplace_front(_Args&&... __args);
|
template <class... _Args> reference emplace_front(_Args&&... __args);
|
||||||
template <class... _Args> void emplace_back(_Args&&... __args);
|
template <class... _Args> reference emplace_back(_Args&&... __args);
|
||||||
template <class... _Args> iterator emplace(const_iterator __p, _Args&&... __args);
|
template <class... _Args> iterator emplace(const_iterator __p, _Args&&... __args);
|
||||||
#endif // _LIBCPP_HAS_NO_VARIADICS
|
#endif // _LIBCPP_HAS_NO_VARIADICS
|
||||||
void push_front(value_type&& __v);
|
void push_front(value_type&& __v);
|
||||||
@@ -1824,15 +1824,17 @@ deque<_Tp, _Allocator>::push_back(value_type&& __v)
|
|||||||
|
|
||||||
template <class _Tp, class _Allocator>
|
template <class _Tp, class _Allocator>
|
||||||
template <class... _Args>
|
template <class... _Args>
|
||||||
void
|
typename deque<_Tp, _Allocator>::reference
|
||||||
deque<_Tp, _Allocator>::emplace_back(_Args&&... __args)
|
deque<_Tp, _Allocator>::emplace_back(_Args&&... __args)
|
||||||
{
|
{
|
||||||
allocator_type& __a = __base::__alloc();
|
allocator_type& __a = __base::__alloc();
|
||||||
if (__back_spare() == 0)
|
if (__back_spare() == 0)
|
||||||
__add_back_capacity();
|
__add_back_capacity();
|
||||||
// __back_spare() >= 1
|
// __back_spare() >= 1
|
||||||
__alloc_traits::construct(__a, _VSTD::addressof(*__base::end()), _VSTD::forward<_Args>(__args)...);
|
__alloc_traits::construct(__a, _VSTD::addressof(*__base::end()),
|
||||||
|
_VSTD::forward<_Args>(__args)...);
|
||||||
++__base::size();
|
++__base::size();
|
||||||
|
return *--__base::end();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // _LIBCPP_HAS_NO_VARIADICS
|
#endif // _LIBCPP_HAS_NO_VARIADICS
|
||||||
@@ -1870,7 +1872,7 @@ deque<_Tp, _Allocator>::push_front(value_type&& __v)
|
|||||||
|
|
||||||
template <class _Tp, class _Allocator>
|
template <class _Tp, class _Allocator>
|
||||||
template <class... _Args>
|
template <class... _Args>
|
||||||
void
|
typename deque<_Tp, _Allocator>::reference
|
||||||
deque<_Tp, _Allocator>::emplace_front(_Args&&... __args)
|
deque<_Tp, _Allocator>::emplace_front(_Args&&... __args)
|
||||||
{
|
{
|
||||||
allocator_type& __a = __base::__alloc();
|
allocator_type& __a = __base::__alloc();
|
||||||
@@ -1880,6 +1882,7 @@ deque<_Tp, _Allocator>::emplace_front(_Args&&... __args)
|
|||||||
__alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), _VSTD::forward<_Args>(__args)...);
|
__alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), _VSTD::forward<_Args>(__args)...);
|
||||||
--__base::__start_;
|
--__base::__start_;
|
||||||
++__base::size();
|
++__base::size();
|
||||||
|
return *__base::begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // _LIBCPP_HAS_NO_VARIADICS
|
#endif // _LIBCPP_HAS_NO_VARIADICS
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public:
|
|||||||
reference front();
|
reference front();
|
||||||
const_reference front() const;
|
const_reference front() const;
|
||||||
|
|
||||||
template <class... Args> void emplace_front(Args&&... args);
|
template <class... Args> reference emplace_front(Args&&... args);
|
||||||
void push_front(const value_type& v);
|
void push_front(const value_type& v);
|
||||||
void push_front(value_type&& v);
|
void push_front(value_type&& v);
|
||||||
|
|
||||||
@@ -744,7 +744,7 @@ public:
|
|||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||||
#ifndef _LIBCPP_HAS_NO_VARIADICS
|
#ifndef _LIBCPP_HAS_NO_VARIADICS
|
||||||
template <class... _Args> void emplace_front(_Args&&... __args);
|
template <class... _Args> reference emplace_front(_Args&&... __args);
|
||||||
#endif
|
#endif
|
||||||
void push_front(value_type&& __v);
|
void push_front(value_type&& __v);
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||||
@@ -1099,7 +1099,7 @@ forward_list<_Tp, _Alloc>::assign(initializer_list<value_type> __il)
|
|||||||
|
|
||||||
template <class _Tp, class _Alloc>
|
template <class _Tp, class _Alloc>
|
||||||
template <class... _Args>
|
template <class... _Args>
|
||||||
void
|
typename forward_list<_Tp, _Alloc>::reference
|
||||||
forward_list<_Tp, _Alloc>::emplace_front(_Args&&... __args)
|
forward_list<_Tp, _Alloc>::emplace_front(_Args&&... __args)
|
||||||
{
|
{
|
||||||
__node_allocator& __a = base::__alloc();
|
__node_allocator& __a = base::__alloc();
|
||||||
@@ -1109,6 +1109,7 @@ forward_list<_Tp, _Alloc>::emplace_front(_Args&&... __args)
|
|||||||
_VSTD::forward<_Args>(__args)...);
|
_VSTD::forward<_Args>(__args)...);
|
||||||
__h->__next_ = base::__before_begin()->__next_;
|
__h->__next_ = base::__before_begin()->__next_;
|
||||||
base::__before_begin()->__next_ = __h.release();
|
base::__before_begin()->__next_ = __h.release();
|
||||||
|
return base::__before_begin()->__next_->__value_;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // _LIBCPP_HAS_NO_VARIADICS
|
#endif // _LIBCPP_HAS_NO_VARIADICS
|
||||||
|
|||||||
16
include/list
16
include/list
@@ -93,10 +93,10 @@ public:
|
|||||||
size_type max_size() const noexcept;
|
size_type max_size() const noexcept;
|
||||||
|
|
||||||
template <class... Args>
|
template <class... Args>
|
||||||
void emplace_front(Args&&... args);
|
reference emplace_front(Args&&... args);
|
||||||
void pop_front();
|
void pop_front();
|
||||||
template <class... Args>
|
template <class... Args>
|
||||||
void emplace_back(Args&&... args);
|
reference emplace_back(Args&&... args);
|
||||||
void pop_back();
|
void pop_back();
|
||||||
void push_front(const value_type& x);
|
void push_front(const value_type& x);
|
||||||
void push_front(value_type&& x);
|
void push_front(value_type&& x);
|
||||||
@@ -968,9 +968,9 @@ public:
|
|||||||
void push_back(value_type&& __x);
|
void push_back(value_type&& __x);
|
||||||
#ifndef _LIBCPP_HAS_NO_VARIADICS
|
#ifndef _LIBCPP_HAS_NO_VARIADICS
|
||||||
template <class... _Args>
|
template <class... _Args>
|
||||||
void emplace_front(_Args&&... __args);
|
reference emplace_front(_Args&&... __args);
|
||||||
template <class... _Args>
|
template <class... _Args>
|
||||||
void emplace_back(_Args&&... __args);
|
reference emplace_back(_Args&&... __args);
|
||||||
template <class... _Args>
|
template <class... _Args>
|
||||||
iterator emplace(const_iterator __p, _Args&&... __args);
|
iterator emplace(const_iterator __p, _Args&&... __args);
|
||||||
#endif // _LIBCPP_HAS_NO_VARIADICS
|
#endif // _LIBCPP_HAS_NO_VARIADICS
|
||||||
@@ -1593,7 +1593,7 @@ list<_Tp, _Alloc>::push_back(value_type&& __x)
|
|||||||
|
|
||||||
template <class _Tp, class _Alloc>
|
template <class _Tp, class _Alloc>
|
||||||
template <class... _Args>
|
template <class... _Args>
|
||||||
void
|
typename list<_Tp, _Alloc>::reference
|
||||||
list<_Tp, _Alloc>::emplace_front(_Args&&... __args)
|
list<_Tp, _Alloc>::emplace_front(_Args&&... __args)
|
||||||
{
|
{
|
||||||
__node_allocator& __na = base::__node_alloc();
|
__node_allocator& __na = base::__node_alloc();
|
||||||
@@ -1602,12 +1602,12 @@ list<_Tp, _Alloc>::emplace_front(_Args&&... __args)
|
|||||||
__node_alloc_traits::construct(__na, _VSTD::addressof(__hold->__value_), _VSTD::forward<_Args>(__args)...);
|
__node_alloc_traits::construct(__na, _VSTD::addressof(__hold->__value_), _VSTD::forward<_Args>(__args)...);
|
||||||
__link_nodes_at_front(__hold.get()->__as_link(), __hold.get()->__as_link());
|
__link_nodes_at_front(__hold.get()->__as_link(), __hold.get()->__as_link());
|
||||||
++base::__sz();
|
++base::__sz();
|
||||||
__hold.release();
|
return __hold.release()->__value_;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class _Tp, class _Alloc>
|
template <class _Tp, class _Alloc>
|
||||||
template <class... _Args>
|
template <class... _Args>
|
||||||
void
|
typename list<_Tp, _Alloc>::reference
|
||||||
list<_Tp, _Alloc>::emplace_back(_Args&&... __args)
|
list<_Tp, _Alloc>::emplace_back(_Args&&... __args)
|
||||||
{
|
{
|
||||||
__node_allocator& __na = base::__node_alloc();
|
__node_allocator& __na = base::__node_alloc();
|
||||||
@@ -1617,7 +1617,7 @@ list<_Tp, _Alloc>::emplace_back(_Args&&... __args)
|
|||||||
__link_pointer __nl = __hold->__as_link();
|
__link_pointer __nl = __hold->__as_link();
|
||||||
__link_nodes_at_back(__nl, __nl);
|
__link_nodes_at_back(__nl, __nl);
|
||||||
++base::__sz();
|
++base::__sz();
|
||||||
__hold.release();
|
return __hold.release()->__value_;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class _Tp, class _Alloc>
|
template <class _Tp, class _Alloc>
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public:
|
|||||||
|
|
||||||
void push(const value_type& v);
|
void push(const value_type& v);
|
||||||
void push(value_type&& v);
|
void push(value_type&& v);
|
||||||
template <class... Args> void emplace(Args&&... args);
|
template <class... Args> reference emplace(Args&&... args);
|
||||||
void pop();
|
void pop();
|
||||||
|
|
||||||
void swap(queue& q) noexcept(is_nothrow_swappable_v<Container>)
|
void swap(queue& q) noexcept(is_nothrow_swappable_v<Container>)
|
||||||
@@ -292,8 +292,8 @@ public:
|
|||||||
#ifndef _LIBCPP_HAS_NO_VARIADICS
|
#ifndef _LIBCPP_HAS_NO_VARIADICS
|
||||||
template <class... _Args>
|
template <class... _Args>
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
void emplace(_Args&&... __args)
|
reference emplace(_Args&&... __args)
|
||||||
{c.emplace_back(_VSTD::forward<_Args>(__args)...);}
|
{ return c.emplace_back(_VSTD::forward<_Args>(__args)...);}
|
||||||
#endif // _LIBCPP_HAS_NO_VARIADICS
|
#endif // _LIBCPP_HAS_NO_VARIADICS
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ public:
|
|||||||
|
|
||||||
void push(const value_type& x);
|
void push(const value_type& x);
|
||||||
void push(value_type&& x);
|
void push(value_type&& x);
|
||||||
template <class... Args> void emplace(Args&&... args);
|
template <class... Args> reference emplace(Args&&... args);
|
||||||
void pop();
|
void pop();
|
||||||
|
|
||||||
void swap(stack& c) noexcept(is_nothrow_swappable_v<Container>)
|
void swap(stack& c) noexcept(is_nothrow_swappable_v<Container>)
|
||||||
@@ -199,8 +199,8 @@ public:
|
|||||||
#ifndef _LIBCPP_HAS_NO_VARIADICS
|
#ifndef _LIBCPP_HAS_NO_VARIADICS
|
||||||
template <class... _Args>
|
template <class... _Args>
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
void emplace(_Args&&... __args)
|
reference emplace(_Args&&... __args)
|
||||||
{c.emplace_back(_VSTD::forward<_Args>(__args)...);}
|
{ return c.emplace_back(_VSTD::forward<_Args>(__args)...);}
|
||||||
#endif // _LIBCPP_HAS_NO_VARIADICS
|
#endif // _LIBCPP_HAS_NO_VARIADICS
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ public:
|
|||||||
void push_back(const value_type& x);
|
void push_back(const value_type& x);
|
||||||
void push_back(value_type&& x);
|
void push_back(value_type&& x);
|
||||||
template <class... Args>
|
template <class... Args>
|
||||||
void emplace_back(Args&&... args);
|
reference emplace_back(Args&&... args);
|
||||||
void pop_back();
|
void pop_back();
|
||||||
|
|
||||||
template <class... Args> iterator emplace(const_iterator position, Args&&... args);
|
template <class... Args> iterator emplace(const_iterator position, Args&&... args);
|
||||||
@@ -218,7 +218,7 @@ public:
|
|||||||
const_reference back() const;
|
const_reference back() const;
|
||||||
|
|
||||||
void push_back(const value_type& x);
|
void push_back(const value_type& x);
|
||||||
template <class... Args> void emplace_back(Args&&... args); // C++14
|
template <class... Args> reference emplace_back(Args&&... args); // C++14
|
||||||
void pop_back();
|
void pop_back();
|
||||||
|
|
||||||
template <class... Args> iterator emplace(const_iterator position, Args&&... args); // C++14
|
template <class... Args> iterator emplace(const_iterator position, Args&&... args); // C++14
|
||||||
@@ -687,7 +687,7 @@ public:
|
|||||||
#ifndef _LIBCPP_HAS_NO_VARIADICS
|
#ifndef _LIBCPP_HAS_NO_VARIADICS
|
||||||
template <class... _Args>
|
template <class... _Args>
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
void emplace_back(_Args&&... __args);
|
reference emplace_back(_Args&&... __args);
|
||||||
#endif // _LIBCPP_HAS_NO_VARIADICS
|
#endif // _LIBCPP_HAS_NO_VARIADICS
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
@@ -1632,7 +1632,7 @@ vector<_Tp, _Allocator>::__emplace_back_slow_path(_Args&&... __args)
|
|||||||
template <class _Tp, class _Allocator>
|
template <class _Tp, class _Allocator>
|
||||||
template <class... _Args>
|
template <class... _Args>
|
||||||
inline
|
inline
|
||||||
void
|
typename vector<_Tp, _Allocator>::reference
|
||||||
vector<_Tp, _Allocator>::emplace_back(_Args&&... __args)
|
vector<_Tp, _Allocator>::emplace_back(_Args&&... __args)
|
||||||
{
|
{
|
||||||
if (this->__end_ < this->__end_cap())
|
if (this->__end_ < this->__end_cap())
|
||||||
@@ -1646,6 +1646,7 @@ vector<_Tp, _Allocator>::emplace_back(_Args&&... __args)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
__emplace_back_slow_path(_VSTD::forward<_Args>(__args)...);
|
__emplace_back_slow_path(_VSTD::forward<_Args>(__args)...);
|
||||||
|
return this->back();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // _LIBCPP_HAS_NO_VARIADICS
|
#endif // _LIBCPP_HAS_NO_VARIADICS
|
||||||
@@ -2314,8 +2315,10 @@ public:
|
|||||||
void push_back(const value_type& __x);
|
void push_back(const value_type& __x);
|
||||||
#if _LIBCPP_STD_VER > 11
|
#if _LIBCPP_STD_VER > 11
|
||||||
template <class... _Args>
|
template <class... _Args>
|
||||||
_LIBCPP_INLINE_VISIBILITY void emplace_back(_Args&&... __args)
|
_LIBCPP_INLINE_VISIBILITY reference emplace_back(_Args&&... __args) {
|
||||||
{ push_back ( value_type ( _VSTD::forward<_Args>(__args)... )); }
|
push_back ( value_type ( _VSTD::forward<_Args>(__args)... ));
|
||||||
|
return this->back();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_LIBCPP_INLINE_VISIBILITY void pop_back() {--__size_;}
|
_LIBCPP_INLINE_VISIBILITY void pop_back() {--__size_;}
|
||||||
|
|||||||
@@ -7,9 +7,11 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// UNSUPPORTED: c++98, c++03
|
||||||
|
|
||||||
// <queue>
|
// <queue>
|
||||||
|
|
||||||
// template <class... Args> void emplace(Args&&... args);
|
// template <class... Args> reference emplace(Args&&... args);
|
||||||
|
|
||||||
#include <queue>
|
#include <queue>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
@@ -18,13 +20,17 @@
|
|||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
typedef Emplaceable T;
|
||||||
std::queue<Emplaceable> q;
|
std::queue<Emplaceable> q;
|
||||||
q.emplace(1, 2.5);
|
T& r1 = q.emplace(1, 2.5);
|
||||||
q.emplace(2, 3.5);
|
assert(&r1 == &q.back());
|
||||||
q.emplace(3, 4.5);
|
T& r2 = q.emplace(2, 3.5);
|
||||||
|
assert(&r2 == &q.back());
|
||||||
|
T& r3 = q.emplace(3, 4.5);
|
||||||
|
assert(&r3 == &q.back());
|
||||||
assert(q.size() == 3);
|
assert(q.size() == 3);
|
||||||
assert(q.front() == Emplaceable(1, 2.5));
|
assert(q.front() == Emplaceable(1, 2.5));
|
||||||
assert(q.back() == Emplaceable(3, 4.5));
|
assert(q.back() == Emplaceable(3, 4.5));
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
assert(&r3 == &q.back());
|
||||||
|
assert(&r1 == &q.front());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,11 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// UNSUPPORTED: c++98, c++03
|
||||||
|
|
||||||
// <stack>
|
// <stack>
|
||||||
|
|
||||||
// template <class... Args> void emplace(Args&&... args);
|
// template <class... Args> reference emplace(Args&&... args);
|
||||||
|
|
||||||
#include <stack>
|
#include <stack>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
@@ -18,12 +20,14 @@
|
|||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
typedef Emplaceable T;
|
||||||
std::stack<Emplaceable> q;
|
std::stack<Emplaceable> q;
|
||||||
q.emplace(1, 2.5);
|
T& r1 = q.emplace(1, 2.5);
|
||||||
q.emplace(2, 3.5);
|
assert(&r1 == &q.top());
|
||||||
q.emplace(3, 4.5);
|
T& r2 = q.emplace(2, 3.5);
|
||||||
|
assert(&r2 == &q.top());
|
||||||
|
T& r3 = q.emplace(3, 4.5);
|
||||||
|
assert(&r3 == &q.top());
|
||||||
assert(q.size() == 3);
|
assert(q.size() == 3);
|
||||||
assert(q.top() == Emplaceable(3, 4.5));
|
assert(q.top() == Emplaceable(3, 4.5));
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,11 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// UNSUPPORTED: c++98, c++03
|
||||||
|
|
||||||
// <deque>
|
// <deque>
|
||||||
|
|
||||||
// template <class... Args> void emplace_back(Args&&... args);
|
// template <class... Args> reference emplace_back(Args&&... args);
|
||||||
|
|
||||||
#include <deque>
|
#include <deque>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
@@ -18,8 +20,6 @@
|
|||||||
#include "min_allocator.h"
|
#include "min_allocator.h"
|
||||||
#include "test_allocator.h"
|
#include "test_allocator.h"
|
||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
|
|
||||||
template <class C>
|
template <class C>
|
||||||
C
|
C
|
||||||
make(int size, int start = 0 )
|
make(int size, int start = 0 )
|
||||||
@@ -47,12 +47,14 @@ void
|
|||||||
test(C& c1)
|
test(C& c1)
|
||||||
{
|
{
|
||||||
typedef typename C::iterator I;
|
typedef typename C::iterator I;
|
||||||
|
typedef typename C::reference Ref;
|
||||||
std::size_t c1_osize = c1.size();
|
std::size_t c1_osize = c1.size();
|
||||||
c1.emplace_back(Emplaceable(1, 2.5));
|
Ref ref = c1.emplace_back(Emplaceable(1, 2.5));
|
||||||
assert(c1.size() == c1_osize + 1);
|
assert(c1.size() == c1_osize + 1);
|
||||||
assert(distance(c1.begin(), c1.end()) == c1.size());
|
assert(distance(c1.begin(), c1.end()) == c1.size());
|
||||||
I i = c1.end();
|
I i = c1.end();
|
||||||
assert(*--i == Emplaceable(1, 2.5));
|
assert(*--i == Emplaceable(1, 2.5));
|
||||||
|
assert(&(*i) == &ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class C>
|
template <class C>
|
||||||
@@ -63,11 +65,8 @@ testN(int start, int N)
|
|||||||
test(c1);
|
test(c1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
{
|
{
|
||||||
int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049};
|
int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049};
|
||||||
const int N = sizeof(rng)/sizeof(rng[0]);
|
const int N = sizeof(rng)/sizeof(rng[0]);
|
||||||
@@ -75,7 +74,6 @@ int main()
|
|||||||
for (int j = 0; j < N; ++j)
|
for (int j = 0; j < N; ++j)
|
||||||
testN<std::deque<Emplaceable> >(rng[i], rng[j]);
|
testN<std::deque<Emplaceable> >(rng[i], rng[j]);
|
||||||
}
|
}
|
||||||
#if TEST_STD_VER >= 11
|
|
||||||
{
|
{
|
||||||
int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049};
|
int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049};
|
||||||
const int N = sizeof(rng)/sizeof(rng[0]);
|
const int N = sizeof(rng)/sizeof(rng[0]);
|
||||||
@@ -94,6 +92,4 @@ int main()
|
|||||||
c.emplace_front(1, 2, 3);
|
c.emplace_front(1, 2, 3);
|
||||||
assert(c.size() == 4);
|
assert(c.size() == 4);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,11 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// UNSUPPORTED: c++98, c++03
|
||||||
|
|
||||||
// <deque>
|
// <deque>
|
||||||
|
|
||||||
// template <class... Args> void emplace_front(Args&&... args);
|
// template <class... Args> reference emplace_front(Args&&... args);
|
||||||
|
|
||||||
#include <deque>
|
#include <deque>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
@@ -17,8 +19,6 @@
|
|||||||
#include "../../../Emplaceable.h"
|
#include "../../../Emplaceable.h"
|
||||||
#include "min_allocator.h"
|
#include "min_allocator.h"
|
||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
|
|
||||||
template <class C>
|
template <class C>
|
||||||
C
|
C
|
||||||
make(int size, int start = 0 )
|
make(int size, int start = 0 )
|
||||||
@@ -46,12 +46,14 @@ void
|
|||||||
test(C& c1)
|
test(C& c1)
|
||||||
{
|
{
|
||||||
typedef typename C::iterator I;
|
typedef typename C::iterator I;
|
||||||
|
typedef typename C::reference Ref;
|
||||||
std::size_t c1_osize = c1.size();
|
std::size_t c1_osize = c1.size();
|
||||||
c1.emplace_front(Emplaceable(1, 2.5));
|
Ref res_ref = c1.emplace_front(Emplaceable(1, 2.5));
|
||||||
assert(c1.size() == c1_osize + 1);
|
assert(c1.size() == c1_osize + 1);
|
||||||
assert(distance(c1.begin(), c1.end()) == c1.size());
|
assert(distance(c1.begin(), c1.end()) == c1.size());
|
||||||
I i = c1.begin();
|
I i = c1.begin();
|
||||||
assert(*i == Emplaceable(1, 2.5));
|
assert(*i == Emplaceable(1, 2.5));
|
||||||
|
assert(&res_ref == &(*i));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class C>
|
template <class C>
|
||||||
@@ -62,11 +64,9 @@ testN(int start, int N)
|
|||||||
test(c1);
|
test(c1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
{
|
{
|
||||||
int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049};
|
int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049};
|
||||||
const int N = sizeof(rng)/sizeof(rng[0]);
|
const int N = sizeof(rng)/sizeof(rng[0]);
|
||||||
@@ -74,7 +74,6 @@ int main()
|
|||||||
for (int j = 0; j < N; ++j)
|
for (int j = 0; j < N; ++j)
|
||||||
testN<std::deque<Emplaceable> >(rng[i], rng[j]);
|
testN<std::deque<Emplaceable> >(rng[i], rng[j]);
|
||||||
}
|
}
|
||||||
#if TEST_STD_VER >= 11
|
|
||||||
{
|
{
|
||||||
int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049};
|
int rng[] = {0, 1, 2, 3, 1023, 1024, 1025, 2047, 2048, 2049};
|
||||||
const int N = sizeof(rng)/sizeof(rng[0]);
|
const int N = sizeof(rng)/sizeof(rng[0]);
|
||||||
@@ -82,6 +81,4 @@ int main()
|
|||||||
for (int j = 0; j < N; ++j)
|
for (int j = 0; j < N; ++j)
|
||||||
testN<std::deque<Emplaceable, min_allocator<Emplaceable>> >(rng[i], rng[j]);
|
testN<std::deque<Emplaceable, min_allocator<Emplaceable>> >(rng[i], rng[j]);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,11 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// UNSUPPORTED: c++98, c++03
|
||||||
|
|
||||||
// <forward_list>
|
// <forward_list>
|
||||||
|
|
||||||
// template <class... Args> void emplace_front(Args&&... args);
|
// template <class... Args> reference emplace_front(Args&&... args);
|
||||||
|
|
||||||
#include <forward_list>
|
#include <forward_list>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
@@ -19,32 +21,32 @@
|
|||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
{
|
{
|
||||||
typedef Emplaceable T;
|
typedef Emplaceable T;
|
||||||
typedef std::forward_list<T> C;
|
typedef std::forward_list<T> C;
|
||||||
C c;
|
C c;
|
||||||
c.emplace_front();
|
T& r1 = c.emplace_front();
|
||||||
assert(c.front() == Emplaceable());
|
assert(c.front() == Emplaceable());
|
||||||
|
assert(&r1 == &c.front());
|
||||||
assert(distance(c.begin(), c.end()) == 1);
|
assert(distance(c.begin(), c.end()) == 1);
|
||||||
c.emplace_front(1, 2.5);
|
T& r2 = c.emplace_front(1, 2.5);
|
||||||
assert(c.front() == Emplaceable(1, 2.5));
|
assert(c.front() == Emplaceable(1, 2.5));
|
||||||
|
assert(&r2 == &c.front());
|
||||||
assert(*next(c.begin()) == Emplaceable());
|
assert(*next(c.begin()) == Emplaceable());
|
||||||
assert(distance(c.begin(), c.end()) == 2);
|
assert(distance(c.begin(), c.end()) == 2);
|
||||||
}
|
}
|
||||||
#if TEST_STD_VER >= 11
|
|
||||||
{
|
{
|
||||||
typedef Emplaceable T;
|
typedef Emplaceable T;
|
||||||
typedef std::forward_list<T, min_allocator<T>> C;
|
typedef std::forward_list<T, min_allocator<T>> C;
|
||||||
C c;
|
C c;
|
||||||
c.emplace_front();
|
T& r1 = c.emplace_front();
|
||||||
assert(c.front() == Emplaceable());
|
assert(c.front() == Emplaceable());
|
||||||
|
assert(&r1 == &c.front());
|
||||||
assert(distance(c.begin(), c.end()) == 1);
|
assert(distance(c.begin(), c.end()) == 1);
|
||||||
c.emplace_front(1, 2.5);
|
T& r2 = c.emplace_front(1, 2.5);
|
||||||
assert(c.front() == Emplaceable(1, 2.5));
|
assert(c.front() == Emplaceable(1, 2.5));
|
||||||
|
assert(&r2 == &c.front());
|
||||||
assert(*next(c.begin()) == Emplaceable());
|
assert(*next(c.begin()) == Emplaceable());
|
||||||
assert(distance(c.begin(), c.end()) == 2);
|
assert(distance(c.begin(), c.end()) == 2);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,11 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// UNSUPPORTED: c++98, c++03
|
||||||
|
|
||||||
// <list>
|
// <list>
|
||||||
|
|
||||||
// template <class... Args> void emplace_back(Args&&... args);
|
// template <class... Args> reference emplace_back(Args&&... args);
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
@@ -33,34 +35,34 @@ public:
|
|||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
{
|
{
|
||||||
std::list<A> c;
|
std::list<A> c;
|
||||||
c.emplace_back(2, 3.5);
|
A& r1 = c.emplace_back(2, 3.5);
|
||||||
assert(c.size() == 1);
|
assert(c.size() == 1);
|
||||||
|
assert(&r1 == &c.back());
|
||||||
assert(c.front().geti() == 2);
|
assert(c.front().geti() == 2);
|
||||||
assert(c.front().getd() == 3.5);
|
assert(c.front().getd() == 3.5);
|
||||||
c.emplace_back(3, 4.5);
|
A& r2 = c.emplace_back(3, 4.5);
|
||||||
assert(c.size() == 2);
|
assert(c.size() == 2);
|
||||||
|
assert(&r2 == &c.back());
|
||||||
assert(c.front().geti() == 2);
|
assert(c.front().geti() == 2);
|
||||||
assert(c.front().getd() == 3.5);
|
assert(c.front().getd() == 3.5);
|
||||||
assert(c.back().geti() == 3);
|
assert(c.back().geti() == 3);
|
||||||
assert(c.back().getd() == 4.5);
|
assert(c.back().getd() == 4.5);
|
||||||
}
|
}
|
||||||
#if TEST_STD_VER >= 11
|
|
||||||
{
|
{
|
||||||
std::list<A, min_allocator<A>> c;
|
std::list<A, min_allocator<A>> c;
|
||||||
c.emplace_back(2, 3.5);
|
A& r1 = c.emplace_back(2, 3.5);
|
||||||
assert(c.size() == 1);
|
assert(c.size() == 1);
|
||||||
|
assert(&r1 == &c.back());
|
||||||
assert(c.front().geti() == 2);
|
assert(c.front().geti() == 2);
|
||||||
assert(c.front().getd() == 3.5);
|
assert(c.front().getd() == 3.5);
|
||||||
c.emplace_back(3, 4.5);
|
A& r2 = c.emplace_back(3, 4.5);
|
||||||
assert(c.size() == 2);
|
assert(c.size() == 2);
|
||||||
|
assert(&r2 == &c.back());
|
||||||
assert(c.front().geti() == 2);
|
assert(c.front().geti() == 2);
|
||||||
assert(c.front().getd() == 3.5);
|
assert(c.front().getd() == 3.5);
|
||||||
assert(c.back().geti() == 3);
|
assert(c.back().geti() == 3);
|
||||||
assert(c.back().getd() == 4.5);
|
assert(c.back().getd() == 4.5);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,11 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// UNSUPPORTED: c++98, c++03
|
||||||
|
|
||||||
// <list>
|
// <list>
|
||||||
|
|
||||||
// template <class... Args> void emplace_front(Args&&... args);
|
// template <class... Args> reference emplace_front(Args&&... args);
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
@@ -33,34 +35,34 @@ public:
|
|||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
{
|
{
|
||||||
std::list<A> c;
|
std::list<A> c;
|
||||||
c.emplace_front(2, 3.5);
|
A& r1 = c.emplace_front(2, 3.5);
|
||||||
assert(c.size() == 1);
|
assert(c.size() == 1);
|
||||||
|
assert(&r1 == &c.front());
|
||||||
assert(c.front().geti() == 2);
|
assert(c.front().geti() == 2);
|
||||||
assert(c.front().getd() == 3.5);
|
assert(c.front().getd() == 3.5);
|
||||||
c.emplace_front(3, 4.5);
|
A& r2 = c.emplace_front(3, 4.5);
|
||||||
assert(c.size() == 2);
|
assert(c.size() == 2);
|
||||||
|
assert(&r2 == &c.front());
|
||||||
assert(c.front().geti() == 3);
|
assert(c.front().geti() == 3);
|
||||||
assert(c.front().getd() == 4.5);
|
assert(c.front().getd() == 4.5);
|
||||||
assert(c.back().geti() == 2);
|
assert(c.back().geti() == 2);
|
||||||
assert(c.back().getd() == 3.5);
|
assert(c.back().getd() == 3.5);
|
||||||
}
|
}
|
||||||
#if TEST_STD_VER >= 11
|
|
||||||
{
|
{
|
||||||
std::list<A, min_allocator<A>> c;
|
std::list<A, min_allocator<A>> c;
|
||||||
c.emplace_front(2, 3.5);
|
A& r1 = c.emplace_front(2, 3.5);
|
||||||
assert(c.size() == 1);
|
assert(c.size() == 1);
|
||||||
|
assert(&r1 == &c.front());
|
||||||
assert(c.front().geti() == 2);
|
assert(c.front().geti() == 2);
|
||||||
assert(c.front().getd() == 3.5);
|
assert(c.front().getd() == 3.5);
|
||||||
c.emplace_front(3, 4.5);
|
A& r2 = c.emplace_front(3, 4.5);
|
||||||
assert(c.size() == 2);
|
assert(c.size() == 2);
|
||||||
|
assert(&r2 == &c.front());
|
||||||
assert(c.front().geti() == 3);
|
assert(c.front().geti() == 3);
|
||||||
assert(c.front().getd() == 4.5);
|
assert(c.front().getd() == 4.5);
|
||||||
assert(c.back().geti() == 2);
|
assert(c.back().geti() == 2);
|
||||||
assert(c.back().getd() == 3.5);
|
assert(c.back().getd() == 3.5);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,42 +11,57 @@
|
|||||||
// <vector>
|
// <vector>
|
||||||
// vector.bool
|
// vector.bool
|
||||||
|
|
||||||
// template <class... Args> void emplace_back(Args&&... args);
|
// template <class... Args> reference emplace_back(Args&&... args);
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include "min_allocator.h"
|
#include "min_allocator.h"
|
||||||
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
typedef std::vector<bool> C;
|
typedef std::vector<bool> C;
|
||||||
|
typedef C::reference Ref;
|
||||||
C c;
|
C c;
|
||||||
c.emplace_back();
|
Ref r1 = c.emplace_back();
|
||||||
assert(c.size() == 1);
|
assert(c.size() == 1);
|
||||||
assert(c.front() == false);
|
assert(c.front() == false);
|
||||||
c.emplace_back(true);
|
r1 = true;
|
||||||
|
assert(c.front() == true);
|
||||||
|
r1 = false;
|
||||||
|
Ref r2 = c.emplace_back(true);
|
||||||
assert(c.size() == 2);
|
assert(c.size() == 2);
|
||||||
assert(c.front() == false);
|
assert(c.front() == false);
|
||||||
assert(c.back() == true);
|
assert(c.back() == true);
|
||||||
c.emplace_back(1 == 1);
|
r2 = false;
|
||||||
|
assert(c.back() == false);
|
||||||
|
r2 = true;
|
||||||
|
Ref r3 = c.emplace_back(1 == 1);
|
||||||
assert(c.size() == 3);
|
assert(c.size() == 3);
|
||||||
assert(c.front() == false);
|
assert(c.front() == false);
|
||||||
assert(c[1] == true);
|
assert(c[1] == true);
|
||||||
assert(c.back() == true);
|
assert(c.back() == true);
|
||||||
|
r3 = false;
|
||||||
|
assert(c.back() == false);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
typedef std::vector<bool, min_allocator<bool>> C;
|
typedef std::vector<bool, min_allocator<bool>> C;
|
||||||
|
typedef C::reference Ref;
|
||||||
C c;
|
C c;
|
||||||
|
|
||||||
c.emplace_back();
|
Ref r1 = c.emplace_back();
|
||||||
assert(c.size() == 1);
|
assert(c.size() == 1);
|
||||||
assert(c.front() == false);
|
assert(c.front() == false);
|
||||||
c.emplace_back(true);
|
r1 = true;
|
||||||
|
assert(c.front() == true);
|
||||||
|
r1 = false;
|
||||||
|
Ref r2 = c.emplace_back(true);
|
||||||
assert(c.size() == 2);
|
assert(c.size() == 2);
|
||||||
assert(c.front() == false);
|
assert(c.front() == false);
|
||||||
assert(c.back() == true);
|
assert(c.back() == true);
|
||||||
|
r2 = false;
|
||||||
|
assert(c.back() == false);
|
||||||
|
r2 = true;
|
||||||
c.emplace_back(1 == 1);
|
c.emplace_back(1 == 1);
|
||||||
assert(c.size() == 3);
|
assert(c.size() == 3);
|
||||||
assert(c.front() == false);
|
assert(c.front() == false);
|
||||||
|
|||||||
@@ -7,9 +7,11 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// UNSUPPORTED: c++98, c++03
|
||||||
|
|
||||||
// <vector>
|
// <vector>
|
||||||
|
|
||||||
// template <class... Args> void emplace_back(Args&&... args);
|
// template <class... Args> reference emplace_back(Args&&... args);
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
@@ -18,8 +20,6 @@
|
|||||||
#include "test_allocator.h"
|
#include "test_allocator.h"
|
||||||
#include "asan_testing.h"
|
#include "asan_testing.h"
|
||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
|
|
||||||
class A
|
class A
|
||||||
{
|
{
|
||||||
int i_;
|
int i_;
|
||||||
@@ -52,20 +52,19 @@ public:
|
|||||||
double getd() const {return d_;}
|
double getd() const {return d_;}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
{
|
{
|
||||||
std::vector<A> c;
|
std::vector<A> c;
|
||||||
c.emplace_back(2, 3.5);
|
A& r1 = c.emplace_back(2, 3.5);
|
||||||
assert(c.size() == 1);
|
assert(c.size() == 1);
|
||||||
|
assert(&r1 == &c.back());
|
||||||
assert(c.front().geti() == 2);
|
assert(c.front().geti() == 2);
|
||||||
assert(c.front().getd() == 3.5);
|
assert(c.front().getd() == 3.5);
|
||||||
assert(is_contiguous_container_asan_correct(c));
|
assert(is_contiguous_container_asan_correct(c));
|
||||||
c.emplace_back(3, 4.5);
|
A& r2 = c.emplace_back(3, 4.5);
|
||||||
assert(c.size() == 2);
|
assert(c.size() == 2);
|
||||||
|
assert(&r2 == &c.back());
|
||||||
assert(c.front().geti() == 2);
|
assert(c.front().geti() == 2);
|
||||||
assert(c.front().getd() == 3.5);
|
assert(c.front().getd() == 3.5);
|
||||||
assert(c.back().geti() == 3);
|
assert(c.back().geti() == 3);
|
||||||
@@ -74,29 +73,32 @@ int main()
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::vector<A, stack_allocator<A, 4> > c;
|
std::vector<A, stack_allocator<A, 4> > c;
|
||||||
c.emplace_back(2, 3.5);
|
A& r1 = c.emplace_back(2, 3.5);
|
||||||
assert(c.size() == 1);
|
assert(c.size() == 1);
|
||||||
|
assert(&r1 == &c.back());
|
||||||
assert(c.front().geti() == 2);
|
assert(c.front().geti() == 2);
|
||||||
assert(c.front().getd() == 3.5);
|
assert(c.front().getd() == 3.5);
|
||||||
assert(is_contiguous_container_asan_correct(c));
|
assert(is_contiguous_container_asan_correct(c));
|
||||||
c.emplace_back(3, 4.5);
|
A& r2 = c.emplace_back(3, 4.5);
|
||||||
assert(c.size() == 2);
|
assert(c.size() == 2);
|
||||||
|
assert(&r2 == &c.back());
|
||||||
assert(c.front().geti() == 2);
|
assert(c.front().geti() == 2);
|
||||||
assert(c.front().getd() == 3.5);
|
assert(c.front().getd() == 3.5);
|
||||||
assert(c.back().geti() == 3);
|
assert(c.back().geti() == 3);
|
||||||
assert(c.back().getd() == 4.5);
|
assert(c.back().getd() == 4.5);
|
||||||
assert(is_contiguous_container_asan_correct(c));
|
assert(is_contiguous_container_asan_correct(c));
|
||||||
}
|
}
|
||||||
#if TEST_STD_VER >= 11
|
|
||||||
{
|
{
|
||||||
std::vector<A, min_allocator<A>> c;
|
std::vector<A, min_allocator<A>> c;
|
||||||
c.emplace_back(2, 3.5);
|
A& r1 = c.emplace_back(2, 3.5);
|
||||||
assert(c.size() == 1);
|
assert(c.size() == 1);
|
||||||
|
assert(&r1 == &c.back());
|
||||||
assert(c.front().geti() == 2);
|
assert(c.front().geti() == 2);
|
||||||
assert(c.front().getd() == 3.5);
|
assert(c.front().getd() == 3.5);
|
||||||
assert(is_contiguous_container_asan_correct(c));
|
assert(is_contiguous_container_asan_correct(c));
|
||||||
c.emplace_back(3, 4.5);
|
A& r2 = c.emplace_back(3, 4.5);
|
||||||
assert(c.size() == 2);
|
assert(c.size() == 2);
|
||||||
|
assert(&r2 == &c.back());
|
||||||
assert(c.front().geti() == 2);
|
assert(c.front().geti() == 2);
|
||||||
assert(c.front().getd() == 3.5);
|
assert(c.front().getd() == 3.5);
|
||||||
assert(c.back().geti() == 3);
|
assert(c.back().geti() == 3);
|
||||||
@@ -111,6 +113,4 @@ int main()
|
|||||||
assert(c.size() == 2);
|
assert(c.size() == 2);
|
||||||
assert(is_contiguous_container_asan_correct(c));
|
assert(is_contiguous_container_asan_correct(c));
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,7 +99,7 @@
|
|||||||
<tr><td><a href="http://wg21.link/p0063r3">p0063r3</a></td><td>LWG</td><td>C++17 should refer to C11 instead of C99</td><td>Oulu</td><td></td><td></td></tr>
|
<tr><td><a href="http://wg21.link/p0063r3">p0063r3</a></td><td>LWG</td><td>C++17 should refer to C11 instead of C99</td><td>Oulu</td><td></td><td></td></tr>
|
||||||
<tr><td><a href="http://wg21.link/p0067r3">p0067r3</a></td><td>LWG</td><td>Elementary string conversions</td><td>Oulu</td><td>Postponed to Issaquah</td><td></td></tr>
|
<tr><td><a href="http://wg21.link/p0067r3">p0067r3</a></td><td>LWG</td><td>Elementary string conversions</td><td>Oulu</td><td>Postponed to Issaquah</td><td></td></tr>
|
||||||
<tr><td><a href="http://wg21.link/p0083r3">p0083r3</a></td><td>LWG</td><td>Splicing Maps and Sets</td><td>Oulu</td><td></td><td></td></tr>
|
<tr><td><a href="http://wg21.link/p0083r3">p0083r3</a></td><td>LWG</td><td>Splicing Maps and Sets</td><td>Oulu</td><td></td><td></td></tr>
|
||||||
<tr><td><a href="http://wg21.link/p0084r2">p0084r2</a></td><td>LWG</td><td>Emplace Return Type</td><td>Oulu</td><td></td><td></td></tr>
|
<tr><td><a href="http://wg21.link/p0084r2">p0084r2</a></td><td>LWG</td><td>Emplace Return Type</td><td>Oulu</td><td>Complete</td><td>4.0</td></tr>
|
||||||
<tr><td><a href="http://wg21.link/p0088r3">p0088r3</a></td><td>LWG</td><td>Variant: a type-safe union for C++17</td><td>Oulu</td><td></td><td></td></tr>
|
<tr><td><a href="http://wg21.link/p0088r3">p0088r3</a></td><td>LWG</td><td>Variant: a type-safe union for C++17</td><td>Oulu</td><td></td><td></td></tr>
|
||||||
<tr><td><a href="http://wg21.link/p0163r0">p0163r0</a></td><td>LWG</td><td>shared_ptr::weak_type</td><td>Oulu</td><td>Complete</td><td>3.9</td></tr>
|
<tr><td><a href="http://wg21.link/p0163r0">p0163r0</a></td><td>LWG</td><td>shared_ptr::weak_type</td><td>Oulu</td><td>Complete</td><td>3.9</td></tr>
|
||||||
<tr><td><a href="http://wg21.link/p0174r2">p0174r2</a></td><td>LWG</td><td>Deprecating Vestigial Library Parts in C++17</td><td>Oulu</td><td></td><td></td></tr>
|
<tr><td><a href="http://wg21.link/p0174r2">p0174r2</a></td><td>LWG</td><td>Deprecating Vestigial Library Parts in C++17</td><td>Oulu</td><td></td><td></td></tr>
|
||||||
|
|||||||
Reference in New Issue
Block a user