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);
140 VERIFY( o && o->state == S::throwing_copy);
141 VERIFY( p && p->state == S::throwing_copy);
147 O p = make(S::throwing_move);
149 VERIFY( o && o->state == S::throwing_move);
150 VERIFY( p && p->state == S::moved_from);
154 ATTRIBUTE_UNUSED outcome_type outcome {};
157 O p = make(S::throwing_copy_assignment);
164 { outcome = caught; }
166 { outcome = bad_catch; }
168 VERIFY( o && o->state == S::threw);
169 VERIFY( p && p->state == S::throwing_copy_assignment);
173 ATTRIBUTE_UNUSED outcome_type outcome {};
176 O p = make(S::throwing_move_assignment);
183 { outcome = caught; }
185 { outcome = bad_catch; }
187 VERIFY( o && o->state == S::threw);
188 VERIFY( p && p->state == S::moved_from);