98 using O = gdb::optional<value_type>;
100 auto const make = [](
S s = S::zero) {
return O { gdb::in_place, s }; };
102 enum outcome_type { nothrow, caught, bad_catch };
138 O p = make(S::throwing_copy_assignment);
140 VERIFY( o && o->state == S::throwing_copy_assignment );
141 VERIFY( p && p->state == S::throwing_copy_assignment );
147 O p = make(S::throwing_move_assignment);
149 VERIFY( o && o->state == S::throwing_move_assignment );
150 VERIFY( p && p->state == S::moved_from );
154 outcome_type outcome {};
157 O p = make(S::throwing_copy);
164 { outcome = caught; }
166 { outcome = bad_catch; }
168 VERIFY( outcome == caught );
170 VERIFY( p && p->state == S::throwing_copy );
174 outcome_type outcome {};
177 O p = make(S::throwing_move);
184 { outcome = caught; }
186 { outcome = bad_catch; }
188 VERIFY( outcome == caught );
190 VERIFY( p && p->state == S::moved_from );