Может я, конечно, совсем идиот, но мне почему-то казалось, что в каждом из следующих случаев должен быть один и тот же результат — "26".
#include <boost/format.hpp>
#include <cstdio>
#include <ios>
#include <iostream>
#include <sstream>
#include <string>
int main()
{
std::ostringstream osstr;
osstr << std::hex << '&';
const std::string first = osstr.str(); // &
const std::string second = (boost::format("%X") % '&').str(); // &
char buf[3];
std::sprintf(buf, "%X", '&'); // 26
}
Почему так происходит? Это задокументировано (особенно интересно в случае разницы с boost::format и std::sprintf, т.к. там, я думал, уж точно не должно быть подобного)?