std::string::c_str() и temporaries

Правильно ли сформирован следующий код C++:

void consumer(char const* p)
{
  std::printf("%s", p);
}

std::string random_string_generator()
{
  // returns a random std::string object
}

consumer(random_string_generator().c_str());

Проблема, с которой я столкнулся, заключается в том, что после создания временного объекта std::string и получения указателя c_str() ничто не мешает std::string объект от уничтожения (или, может быть, я ошибаюсь?). Не могли бы вы указать мне стандарт, если код в порядке, несмотря ни на что. Он работает, когда я тестирую с помощью g++.

56
задан user1095108 4 April 2012 в 07:44
поделиться