emplace_back.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
1//===----------------------------------------------------------------------===//
2//
3// ��������������������The LLVM Compiler Infrastructure
4//
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
18#ifdef _LIBCPP_MOVE
19
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
52#endif
53
54int main()
55{
56#ifdef _LIBCPP_MOVE
57    {
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    }
83#endif
84}
85