// { dg-options "-std=gnu++20" } // { dg-do compile { target c++20 } } #include #include constexpr bool test_swap() { std::optional o0, o1(1); o0.swap(o1); VERIFY( *o0 == 1 ); VERIFY( ! o1.has_value() ); o0.swap(o1); VERIFY( ! o0.has_value() ); VERIFY( *o1 == 1 ); o0.swap(o0); VERIFY( ! o0.has_value() ); o1.swap(o1); VERIFY( *o1 == 1 ); std::optional o2(2); swap(o1, o2); VERIFY( *o1 == 2 ); VERIFY( *o2 == 1 ); return true; } static_assert( test_swap() );