String format function
I can't fault the code (assuming it works). Looks good.

But what I would point is that to improve flexibility you should probably use numbered replacement sites.

The problem with format strings is that for I18N and L10N the format strings will be pulled out of the source code and placed in a separate resource file for translation. Unfortunately not all languages use the same noun verb ordering so for I18N to work efficiently you need a flexible placement strategy (so that you only need to change the string resource not the code).

English:

// "The disk named MyDisk contains 300 files."
"The disk named %1 contains %2 files" % DiskName % FileCount;


Basque:

// "300 fitxategi ditu, izendatutako MyDisk diskoa."
"%2 fitxategi ditu, izendatutako %1 diskoa." % DiskName % FileCount;


Or in your code:

std::cout &lt;&lt; Format(stringresource.get("DiskString"), DiskName, FileCount) &lt;&lt; std::endl;