Commit c0f6f5fae1cc6556eee72414b769e726dd99b1bb

Authored by Grzegorz Jabłoński
1 parent 236e44aa

Fixed return value from push operations

examples11/04-vectortmpl/vector.h
... ... @@ -138,8 +138,7 @@ public:
138 138 // cout << "emplace_back" << endl;
139 139 resize_before_push();
140 140 new (data + size) C(std::forward<Args>(args)...);
141   - ++size;
142   - return *(data + size);
  141 + return *(data + size++);
143 142 }
144 143  
145 144 #if 1
... ... @@ -147,24 +146,21 @@ public:
147 146 // cout << "push_back with rvalue argument" << endl;
148 147 resize_before_push();
149 148 new (data + size) C(std::move(s));
150   -// new (data + size) C(s);
151   - ++size;
152   - return *(data + size);
  149 + // new (data + size) C(s);
  150 + return *(data + size++);
153 151 }
154 152  
155 153 C &push_back(const C &s) {
156 154 // cout << "push_back with reference argument" << endl;
157 155 resize_before_push();
158 156 new (data + size) C(s);
159   - ++size;
160   - return *(data + size);
  157 + return *(data + size++);
161 158 }
162 159 #else
163 160 template <class T> C &push_back(T &&s) {
164 161 resize_before_push();
165 162 new (data + size) C(std::forward<T>(s));
166   - ++size;
167   - return *(data + size);
  163 + return *(data + size++);
168 164 }
169 165 #endif
170 166 };
... ...
examples11/05-foldexpr/testvector.cpp
... ... @@ -22,8 +22,8 @@ main ()
22 22 a.push_back(8);
23 23 a.push_back(9);
24 24 a.push_back(10);
25   - a.push_back(11);
26   - a.push_back(12,13,14);
  25 + cout << a.push_back(11) << endl;
  26 + cout << a.push_back(12,13,14) << endl;
27 27 int arg = 15;
28 28 a.push_back(arg);
29 29 b=a;
... ...
examples11/05-foldexpr/vector.h
... ... @@ -138,23 +138,19 @@ public:
138 138 // cout << "emplace_back" << endl;
139 139 resize_before_push();
140 140 new (data + size) C(std::forward<Args>(args)...);
141   - ++size;
142   - return *(data + size);
  141 + return *(data + size++);
143 142 }
144 143  
145 144 private:
146 145 template <class T> C &push_back_single(T &&s) {
147 146 resize_before_push();
148 147 new (data + size) C(std::forward<T>(s));
149   - ++size;
150   - return *(data + size);
  148 + return *(data + size++);
151 149 }
152   -public:
153 150  
  151 +public:
154 152 template <class... Args> C &push_back(Args &&... args) {
155 153 return (push_back_single(std::forward<Args>(args)), ...);
156 154 }
157   -
158   -
159 155 };
160 156 #endif /* __VECTOR_H__ */
... ...