I've got some code that uses the format library to format output, not out of necessity, but rather out of a wanton enjoyment derived from using the syntax, having lately (relatively) discovered boost, prefering the boost::format simple syntax to the posix printf and std::ostringstream flavored solutions. The "problem" I have is that for the output of every double, I have to specify the precision: int main() { cout << setprecision(18); cout << format("Bunner p' air: %1% torr\t\tN$_2$: %2% torr\n" " C air: %3%\t\tN$_2$: %4%") % group(setprecision(18), bunner::air::pp_av) % group(setprecision(18), bunner::N2::pp_av) % group(setprecision(18), bunner::air::c_av) % group(setprecision(18), bunner::N2::c_av) << endl; //... return 0; } Is there a graceful solution, or am I using this library beyond what it was intended for? Something like the following naturally suggests itself, but I don't think it is standard compliant: the constructor doesn't seem to like using a static object, actually the linker couldn't find the 'prmanip' object. class Fmt { public: Fmt() { cout << "duh" << endl << prmanip << constants::pi << endl; } static std::_Setprecision setpr(const int&pr) { prmanip = std::setprecision(pr); return std::setprecision(pr); } static std::_Setprecision prmanip; }; int main() { cout << setprecision(18); Fmt::setpr(18); //... Justin