@@ -243,17 +243,36 @@ class issue_857 {
243
243
};
244
244
245
245
class issue_857_2 {
246
- public: std::unique_ptr<int > a; // OK: No error about 'a' being unused.
246
+ public: std::unique_ptr<int > a;
247
+ public: explicit issue_857_2 (auto const & a_);
248
+
249
+ public: auto operator =(auto const & a_) -> issue_857_2& ;
250
+
251
+ #line 258 "pure2-last-use.cpp2"
252
+ // OK: No error about 'a' being unused.
253
+ #line 259 "pure2-last-use.cpp2"
247
254
};
248
255
249
256
extern int gi;
250
257
class issue_857_3 {
251
258
public: std::add_lvalue_reference_t <int > i {gi};
252
259
public: auto f () && -> void;
260
+ public: explicit issue_857_3 (auto const & i_);
261
+
262
+ public: auto operator =(auto const & i_) -> issue_857_3& ;
263
+ public: explicit issue_857_3 ();
264
+
265
+ #line 265 "pure2-last-use.cpp2"
253
266
};
254
267
class issue_857_6 {
255
268
public: auto f () && -> void;
256
269
public: std::add_lvalue_reference_t <int > i {gi};
270
+ public: explicit issue_857_6 (auto const & i_);
271
+
272
+ public: auto operator =(auto const & i_) -> issue_857_6& ;
273
+ public: explicit issue_857_6 ();
274
+
275
+ #line 269 "pure2-last-use.cpp2"
257
276
};
258
277
259
278
// TODO Alias `std::move_only_function`.
@@ -270,6 +289,8 @@ class issue_857_4 {
270
289
public: std::add_pointer_t <int (int )> g;
271
290
public: move_only_function<int ()> mf;
272
291
public: move_only_function<int (int )> mg;
292
+ public: explicit issue_857_4 (auto const & f_, auto const & g_, auto const & mf_, auto const & mg_);
293
+
273
294
// h0: (move this) = _ = mf();
274
295
// h1: (move this) = _ = this.mf();
275
296
// h2: (move this, that) = _ = that.mf();
@@ -323,11 +344,17 @@ class issue_857_4 {
323
344
// /*i3*/ _ = this.mf();
324
345
// /*i3*/ }
325
346
// }
347
+ #line 336 "pure2-last-use.cpp2"
326
348
};
327
349
328
350
class issue_857_5 {
329
351
public: auto f () && -> void;
330
352
public: std::unique_ptr<int > a;
353
+ public: explicit issue_857_5 (auto const & a_);
354
+
355
+ public: auto operator =(auto const & a_) -> issue_857_5& ;
356
+
357
+ #line 341 "pure2-last-use.cpp2"
331
358
};
332
359
333
360
struct issue_857_7_A_as_base { std::add_lvalue_reference_t <int > A; };
@@ -336,13 +363,19 @@ class issue_857_7: public issue_857_7_A_as_base, public std::monostate {
336
363
337
364
#line 346 "pure2-last-use.cpp2"
338
365
public: auto F () && -> void;
366
+ public: explicit issue_857_7 (auto const & A_);
367
+
368
+ #line 347 "pure2-last-use.cpp2"
339
369
};
340
370
341
371
class issue_857_8 {
342
372
public: std::unique_ptr<int > a;
343
373
public: move_only_function<int ()> b;
344
374
public: std::add_lvalue_reference_t <int > c;
345
375
public: auto d () && -> void;
376
+ public: explicit issue_857_8 (auto const & a_, auto const & b_, auto const & c_);
377
+
378
+ #line 354 "pure2-last-use.cpp2"
346
379
};
347
380
class issue_857_9 : public issue_857_8 {
348
381
@@ -438,6 +471,9 @@ class cpp2_union {
438
471
class my_string {
439
472
public: std::string string;
440
473
public: std::size_t size {CPP2_UFCS (size)(string)};
474
+ public: explicit my_string (auto const & string_, auto const & size_);
475
+
476
+ #line 855 "pure2-last-use.cpp2"
441
477
};
442
478
443
479
using no_pessimizing_move_ret = std::unique_ptr<int >;
@@ -470,6 +506,9 @@ int inline constexpr x{ 0 };
470
506
class t {
471
507
public: std::unique_ptr<int > x;
472
508
public: auto operator ()() && -> void;
509
+ public: explicit t (auto const & x_);
510
+
511
+ public: auto operator =(auto const & x_) -> t& ;
473
512
474
513
#line 938 "pure2-last-use.cpp2"
475
514
};
@@ -484,12 +523,18 @@ auto loops_and_captures() -> void;
484
523
#line 984 "pure2-last-use.cpp2"
485
524
class types {
486
525
public: std::unique_ptr<int > x;
526
+ public: explicit types (auto const & x_);
527
+
528
+ public: auto operator =(auto const & x_) -> types& ;
529
+
530
+ #line 986 "pure2-last-use.cpp2"
487
531
// f: (move this) = _ = :() x$*;
488
532
// g: (move this) = {
489
533
// for (:() x$*)
490
534
// do (_)
491
535
// { }
492
536
// }
537
+ #line 992 "pure2-last-use.cpp2"
493
538
};
494
539
495
540
auto skip_hidden_names () -> void;
@@ -692,14 +737,40 @@ auto issue_850() -> void{
692
737
#line 181 "pure2-last-use.cpp2"
693
738
auto issue_857::h () & -> void { f_inout (a); }
694
739
740
+ issue_857_2::issue_857_2 (auto const & a_)
741
+ : a{ a_ }{}
742
+
743
+ auto issue_857_2::operator =(auto const & a_) -> issue_857_2& {
744
+ a = a_;
745
+ return *this ;}
695
746
#line 261 "pure2-last-use.cpp2"
696
747
int gi {0 };
697
748
698
749
#line 264 "pure2-last-use.cpp2"
699
- auto issue_857_3::f () && -> void { f_inout (cpp2::move (*this ).i ); }// OK: The implicit `this` is moved, not `i`.
750
+ auto issue_857_3::f () && -> void { f_inout (cpp2::move (*this ).i ); }
751
+
752
+ issue_857_3::issue_857_3 (auto const & i_)
753
+ : i{ i_ }{}
754
+
755
+ auto issue_857_3::operator =(auto const & i_) -> issue_857_3& {
756
+ i = i_;
757
+ return *this ;}
758
+ issue_857_3::issue_857_3 (){}
759
+ #line 264 "pure2-last-use.cpp2"
760
+ // OK: The implicit `this` is moved, not `i`.
761
+
762
+ #line 267 "pure2-last-use.cpp2"
763
+ auto issue_857_6::f () && -> void { f_inout (cpp2::move (*this ).i ); }
764
+
765
+ issue_857_6::issue_857_6 (auto const & i_)
766
+ : i{ i_ }{}
700
767
768
+ auto issue_857_6::operator =(auto const & i_) -> issue_857_6& {
769
+ i = i_;
770
+ return *this ;}
771
+ issue_857_6::issue_857_6 (){}
701
772
#line 267 "pure2-last-use.cpp2"
702
- auto issue_857_6::f () && -> void { f_inout ( cpp2::move (* this ). i ); } // OK: The implicit `this` is moved, not `i`.
773
+ // OK: The implicit `this` is moved, not `i`.
703
774
704
775
#line 273 "pure2-last-use.cpp2"
705
776
template <typename T> move_only_function<T>::move_only_function(){}
@@ -711,15 +782,36 @@ int gi {0};
711
782
#line 275 "pure2-last-use.cpp2"
712
783
template <typename T> [[nodiscard]] auto move_only_function<T>::operator ()([[maybe_unused]] auto const & ...unnamed_param_2) && -> int { return 0 ; }
713
784
785
+ issue_857_4::issue_857_4 (auto const & f_, auto const & g_, auto const & mf_, auto const & mg_)
786
+ : f{ f_ }
787
+ , g{ g_ }
788
+ , mf{ mf_ }
789
+ , mg{ mg_ }{}
790
+
714
791
#line 339 "pure2-last-use.cpp2"
715
792
auto issue_857_5::f () && -> void { f_copy (std::move (cpp2::move (*this ).a )); }
716
793
794
+ issue_857_5::issue_857_5 (auto const & a_)
795
+ : a{ a_ }{}
796
+
797
+ auto issue_857_5::operator =(auto const & a_) -> issue_857_5& {
798
+ a = a_;
799
+ return *this ;}
717
800
#line 346 "pure2-last-use.cpp2"
718
801
auto issue_857_7::F () && -> void { f_inout (cpp2::move (*this ).A ); }
719
802
803
+ issue_857_7::issue_857_7 (auto const & A_)
804
+ : issue_857_7_A_as_base{ A_ }
805
+ , std::monostate{ }{}
806
+
720
807
#line 353 "pure2-last-use.cpp2"
721
808
auto issue_857_8::d () && -> void{}
722
809
810
+ issue_857_8::issue_857_8 (auto const & a_, auto const & b_, auto const & c_)
811
+ : a{ a_ }
812
+ , b{ b_ }
813
+ , c{ c_ }{}
814
+
723
815
#line 362 "pure2-last-use.cpp2"
724
816
auto issue_857_9::f2 () && -> void { f_inout (c); }// OK: Happens to work, like non-'move' 'this' parameters.
725
817
@@ -1270,6 +1362,10 @@ auto enum_2() -> void{
1270
1362
static_cast <void >(cpp2::move ((*this )));
1271
1363
}
1272
1364
1365
+ my_string::my_string (auto const & string_, auto const & size_)
1366
+ : string{ string_ }
1367
+ , size{ size_ }{}
1368
+
1273
1369
#line 857 "pure2-last-use.cpp2"
1274
1370
[[nodiscard]] auto no_pessimizing_move () -> no_pessimizing_move_ret{
1275
1371
std::unique_ptr<int > ret {};
@@ -1357,6 +1453,12 @@ auto f() -> void{
1357
1453
});
1358
1454
}
1359
1455
1456
+ t::t (auto const & x_)
1457
+ : x{ x_ }{}
1458
+
1459
+ auto t::operator =(auto const & x_) -> t& {
1460
+ x = x_;
1461
+ return *this ;}
1360
1462
#line 940 "pure2-last-use.cpp2"
1361
1463
auto g () -> void{
1362
1464
static_cast <void >([]() mutable -> void {
@@ -1402,6 +1504,12 @@ auto loops_and_captures() -> void{
1402
1504
// };
1403
1505
}
1404
1506
1507
+ types::types (auto const & x_)
1508
+ : x{ x_ }{}
1509
+
1510
+ auto types::operator =(auto const & x_) -> types& {
1511
+ x = x_;
1512
+ return *this ;}
1405
1513
#line 994 "pure2-last-use.cpp2"
1406
1514
auto skip_hidden_names () -> void{
1407
1515
static_cast <void >([]() mutable -> void {
0 commit comments