blob: a9f49fcec89813e52fcc736221c249c5c0be8a5d [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnantf5256e12010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00004//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <vector>
11
12// template <class... Args> void emplace_back(Args&&... args);
13
14#include <vector>
15#include <cassert>
16#include "../../../stack_allocator.h"
17
Howard Hinnant73d21a42010-09-04 23:28:19 +000018#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000019
20class A
21{
22 int i_;
23 double d_;
24
25 A(const A&);
26 A& operator=(const A&);
27public:
28 A(int i, double d)
29 : i_(i), d_(d) {}
30
31 A(A&& a)
32 : i_(a.i_),
33 d_(a.d_)
34 {
35 a.i_ = 0;
36 a.d_ = 0;
37 }
38
39 A& operator=(A&& a)
40 {
41 i_ = a.i_;
42 d_ = a.d_;
43 a.i_ = 0;
44 a.d_ = 0;
45 return *this;
46 }
47
48 int geti() const {return i_;}
49 double getd() const {return d_;}
50};
51
Howard Hinnant73d21a42010-09-04 23:28:19 +000052#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000053
54int main()
55{
Howard Hinnant73d21a42010-09-04 23:28:19 +000056#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000057 {
58 std::vector<A> c;
59 c.emplace_back(2, 3.5);
60 assert(c.size() == 1);
61 assert(c.front().geti() == 2);
62 assert(c.front().getd() == 3.5);
63 c.emplace_back(3, 4.5);
64 assert(c.size() == 2);
65 assert(c.front().geti() == 2);
66 assert(c.front().getd() == 3.5);
67 assert(c.back().geti() == 3);
68 assert(c.back().getd() == 4.5);
69 }
70 {
71 std::vector<A, stack_allocator<A, 4> > c;
72 c.emplace_back(2, 3.5);
73 assert(c.size() == 1);
74 assert(c.front().geti() == 2);
75 assert(c.front().getd() == 3.5);
76 c.emplace_back(3, 4.5);
77 assert(c.size() == 2);
78 assert(c.front().geti() == 2);
79 assert(c.front().getd() == 3.5);
80 assert(c.back().geti() == 3);
81 assert(c.back().getd() == 4.5);
82 }
Howard Hinnant73d21a42010-09-04 23:28:19 +000083#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000084}