// P0145R2: Refining Expression Order for C++
// { dg-do run { target c++17 } }
#include <string>
#define assert(X) if (!(X)) __builtin_abort();
int main()
{
std::string s = "but I have heard it works even if you don't believe in it" ;
s.replace(0, 4, "" ).replace( s.find( "even" ), 4, "only" )
.replace( s.find( " don't" ), 6, "" );
assert( s == "I have heard it works only if you believe in it" ) ;
}