I've come across multiple instance of this pattern (with boost::filesystem only used as example):
boost::filesystem::path path = ...;
someFunctionTakingCStrings(path.string().c_str());
where
const std::string path::string() const
{
  std::string tmp = ...
  return tmp;
}
Although I have never experienced problem with this pattern, I was wondering when the string returned by sting() is destroyed and whether the code accessing the c_str() is safe as the c_str() lifetime is bound to std::string lifetime.
 
     
    