В Бьярне Страуструпе C++ Раздел программирования 4-е издание 36.3.6
STL-подобные операции следующий код используется в качестве примера цепочки:
void f2()
{
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" ) ;
}
Сбой assert в gcc
(посмотреть его вживую) и Visual Studio
(посмотреть вживую), но он не завершится неудачей при использовании Clang (посмотреть вживую).
Почему я получаю разные результаты? Является ли какой-либо из этих компиляторов неправильно оценивающим выражением цепочки или этот код демонстрирует некоторую форму неопределенного или неопределенного поведения?