1 // P0145R2: Refining Expression Order for C++
3 // { dg-options "-std=c++17" }
5 extern "C" int printf (const char *, ...);
27 A(int i): _i(f(i)) { }
28 A& memfn(int i, int j) { f(j); return *this; }
29 int operator<<(int i) { }
30 A& operator=(const A&) { return *this; }
31 A& operator+=(int i) { return *this; }
38 B(int i): _i(f(i)) { }
41 int operator>>(A&, int i) { }
86 template <class T> void f()
89 A(1).memfn(f(2),3).memfn(f(4),5);
90 aref(6).memfn(f(7),8);
91 (aref(9).*pmff(10))(f(11),12);
95 afn(12)->memfn(f(13),14);
98 (afn(15)->*pmff(16))(f(17),18);
102 // covered in eval-order1.C
109 (f(27), b) = bval(26);
119 afn(20)[f(21)-21].memfn(f(22),23);
120 ip(24)[f(25)-25] = 0;
136 A(1).memfn(f(2),3).memfn(f(4),5);
137 aref(6).memfn(f(7),8);
138 (aref(9).*pmff(10))(f(11),12);
142 afn(12)->memfn(f(13),14);
145 (afn(15)->*pmff(16))(f(17),18);
149 // covered in eval-order1.C
156 (f(27), b) = bval(26);
166 afn(20)[f(21)-21].memfn(f(22),23);
167 ip(24)[f(25)-25] = 0;