|
@@ -7,9 +7,11 @@
|
|
|
//
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
+// UNSUPPORTED: c++98, c++03
|
|
|
+
|
|
|
// <vector>
|
|
|
|
|
|
-// template <class... Args> void emplace_back(Args&&... args);
|
|
|
+// template <class... Args> reference emplace_back(Args&&... args);
|
|
|
|
|
|
#include <vector>
|
|
|
#include <cassert>
|
|
@@ -18,8 +20,6 @@
|
|
|
#include "test_allocator.h"
|
|
|
#include "asan_testing.h"
|
|
|
|
|
|
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
|
-
|
|
|
class A
|
|
|
{
|
|
|
int i_;
|
|
@@ -52,20 +52,19 @@ public:
|
|
|
double getd() const {return d_;}
|
|
|
};
|
|
|
|
|
|
-#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
|
-
|
|
|
int main()
|
|
|
{
|
|
|
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
|
{
|
|
|
std::vector<A> c;
|
|
|
- c.emplace_back(2, 3.5);
|
|
|
+ A& r1 = c.emplace_back(2, 3.5);
|
|
|
assert(c.size() == 1);
|
|
|
+ assert(&r1 == &c.back());
|
|
|
assert(c.front().geti() == 2);
|
|
|
assert(c.front().getd() == 3.5);
|
|
|
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(&r2 == &c.back());
|
|
|
assert(c.front().geti() == 2);
|
|
|
assert(c.front().getd() == 3.5);
|
|
|
assert(c.back().geti() == 3);
|
|
@@ -74,29 +73,32 @@ int main()
|
|
|
}
|
|
|
{
|
|
|
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(&r1 == &c.back());
|
|
|
assert(c.front().geti() == 2);
|
|
|
assert(c.front().getd() == 3.5);
|
|
|
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(&r2 == &c.back());
|
|
|
assert(c.front().geti() == 2);
|
|
|
assert(c.front().getd() == 3.5);
|
|
|
assert(c.back().geti() == 3);
|
|
|
assert(c.back().getd() == 4.5);
|
|
|
assert(is_contiguous_container_asan_correct(c));
|
|
|
}
|
|
|
-#if TEST_STD_VER >= 11
|
|
|
{
|
|
|
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(&r1 == &c.back());
|
|
|
assert(c.front().geti() == 2);
|
|
|
assert(c.front().getd() == 3.5);
|
|
|
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(&r2 == &c.back());
|
|
|
assert(c.front().geti() == 2);
|
|
|
assert(c.front().getd() == 3.5);
|
|
|
assert(c.back().geti() == 3);
|
|
@@ -111,6 +113,4 @@ int main()
|
|
|
assert(c.size() == 2);
|
|
|
assert(is_contiguous_container_asan_correct(c));
|
|
|
}
|
|
|
-#endif
|
|
|
-#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
|
}
|