// { dg-do compile { target c++20 } } // { dg-require-effective-target cxx11_abi } #include #include constexpr bool test_insert() { std::string s; s.insert(0, "one"); VERIFY( s == "one" ); s.insert(0, "eleventy-"); VERIFY( s == "eleventy-one" ); s.insert(6, "ses at ten thirteen", 15); VERIFY( s == "elevenses at ten thirty-one" ); return true; } static_assert( test_insert() ); constexpr bool test_replace() { std::string s = "abcdef"; s.replace(2, 1, s.c_str(), 3); VERIFY( s == "ababcdef" ); s.replace(0, 2, "", 0); VERIFY( s == "abcdef" ); s.replace(1, 4, "ardwol", 6); VERIFY( s == "aardwolf" ); s.replace(4, 0, "vark not wolf"); return true; } static_assert( test_replace() ); constexpr bool test_erasure() { std::string s = "Spiritualized Electric Mainline"; std::erase(s, 'i'); VERIFY( s == "Sprtualzed Electrc Manlne" ); std::erase_if(s, [](char c) { return c == 'l'; }); VERIFY( s == "Sprtuazed Eectrc Manne" ); return true; } static_assert( test_erasure() ); constexpr bool test_move() { // PR libstdc++/113294 std::string s1; std::string s2 = "1234567890123456"; // 16 chars: more than _S_local_capacity s1 = std::move(s2); VERIFY( s1 == "1234567890123456" ); return true; } static_assert( test_move() );