#include <boost/format.hpp>
#include <iostream>
#include <string>
int main()
{
const std::string my_str = "echo '/%1%/ some other stuff'";
boost::format fmtr(my_str);
fmtr % "sleep 3"; // should read: echo '/sleep 3/ some other stuff'
std::cout << "1: " << fmtr.str() << "\n"; // 1. echo '/sleep 3/ some other stuff' (OK)
std::cout << "2: " << fmtr.str().c_str() << "\n"; // 2. echo '/sleep 3 (BAD)
// Try the c_str of a string not created through boost::format
const std::string finished = "echo '/sleep 3/ some other stuff'";
std::cout << "3: " << finished.c_str() << "\n"; // 3. echo '/sleep 3/ some other stuff' (OK)
// Try copying the string from format to see if that makes any difference (it doesn't)
std::string copy = fmtr.str();
std::cout << "4: " << copy.c_str() << "\n"; // 4. echo '/sleep 3 (BAD)
}
I2luY2x1ZGUgPGJvb3N0L2Zvcm1hdC5ocHA+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KCmludCBtYWluKCkKewogICAgY29uc3Qgc3RkOjpzdHJpbmcgbXlfc3RyID0gImVjaG8gJy8lMSUvIHNvbWUgb3RoZXIgc3R1ZmYnIjsKICAgIGJvb3N0Ojpmb3JtYXQgZm10cihteV9zdHIpOwogICAgZm10ciAlICJzbGVlcCAzIjsgICAvLyBzaG91bGQgcmVhZDogZWNobyAnL3NsZWVwIDMvIHNvbWUgb3RoZXIgc3R1ZmYnCgogICAgc3RkOjpjb3V0IDw8ICIxOiAiIDw8IGZtdHIuc3RyKCkgPDwgIlxuIjsgICAgICAgICAgLy8gMS4gZWNobyAnL3NsZWVwIDMvIHNvbWUgb3RoZXIgc3R1ZmYnICAoT0spCiAgICBzdGQ6OmNvdXQgPDwgIjI6ICIgPDwgZm10ci5zdHIoKS5jX3N0cigpIDw8ICJcbiI7ICAvLyAyLiBlY2hvICcvc2xlZXAgMyAgICAgICAgICAgICAgICAgICAgIChCQUQpCgogICAgLy8gVHJ5IHRoZSBjX3N0ciBvZiBhIHN0cmluZyBub3QgY3JlYXRlZCB0aHJvdWdoIGJvb3N0Ojpmb3JtYXQKICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbmlzaGVkID0gImVjaG8gJy9zbGVlcCAzLyBzb21lIG90aGVyIHN0dWZmJyI7CiAgICBzdGQ6OmNvdXQgPDwgIjM6ICIgPDwgZmluaXNoZWQuY19zdHIoKSA8PCAiXG4iOyAgICAvLyAzLiBlY2hvICcvc2xlZXAgMy8gc29tZSBvdGhlciBzdHVmZicgIChPSykKCiAgICAvLyBUcnkgY29weWluZyB0aGUgc3RyaW5nIGZyb20gZm9ybWF0IHRvIHNlZSBpZiB0aGF0IG1ha2VzIGFueSBkaWZmZXJlbmNlIChpdCBkb2Vzbid0KQogICAgc3RkOjpzdHJpbmcgY29weSA9IGZtdHIuc3RyKCk7CiAgICBzdGQ6OmNvdXQgPDwgIjQ6ICIgPDwgY29weS5jX3N0cigpIDw8ICJcbiI7ICAgICAgICAvLyA0LiBlY2hvICcvc2xlZXAgMyAgICAgICAgICAgICAgICAgICAgIChCQUQpCn0K