// { dg-do compile { target c++20 } } // { dg-require-effective-target cxx11_abi } #include #include using C = char; using T = std::char_traits; constexpr bool test_swap() { std::basic_string s0; s0.swap(s0); VERIFY( s0.empty() ); std::basic_string s00; s0.swap(s00); VERIFY( s0.empty() ); VERIFY( s00.empty() ); std::basic_string s1 = "s1"; s1.swap(s0); VERIFY( s1.empty() ); VERIFY( ! s0.empty() ); s1.swap(s0); VERIFY( s0.empty() ); VERIFY( ! s1.empty() ); std::basic_string s2 = "quite a long string, but not very long"; s2.swap(s1); VERIFY( s2.length() == 2 ); VERIFY( s1.length() == 38 ); s2.swap(s1); VERIFY( s1.length() == 2 ); VERIFY( s2.length() == 38 ); swap(s2, s0); VERIFY( s2.empty() ); VERIFY( s0.length() == 38 ); auto s3 = s0; swap(s3, s0); VERIFY( s3 == s0 ); return true; } static_assert( test_swap() );