он не будет скомпилирован из-за отсутствующей точки с запятой:
const char* p = (std::string("Hello") + std::string("World")).c_str(); //<< important here
std::cout << p;
СЕЙЧАС правило применяется к удалению временного в конце выражения, в котором он используется, то есть в точке с запятой,Таким образом, у вас есть указатель на удаленную память, которая вызывает неопределенное поведение.