title: std::string::c_str() and temporaries
body: <p>Is the following C++ code well-formed:</p>
  
  <pre><code>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());
  </code></pre>
  
  <p>The problem I have with it is, that after creating the temporary std::string object and taking the c_str() pointer, nothing prevents the std::string object from getting destroyed (or maybe I'm wrong?). Can you please point me to the standard, if the code is OK despite everything. It does work, when I test with g++.</p>