title: Real positional string formatting?
body: <p><sup>(Note: I know of Boost.Format, I'm looking for a better way to do the following.)</sup><br>
  First a use-case example: In some countries, you name a person by calling his / her surname first and the forename last, while in other countries it's the exact opposite.</p>
  
  <p>Now, for my code, I currently solve this with Boost.Format in the following fashion:</p>
  
  <pre><code>#include &lt;boost/format.hpp&gt;
  #include &lt;iostream&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;utility&gt;
  
  int main(){
      using namespace boost;
  
      int pos1 = 2, pos2 = 1;
      char const* surname = "Surname", *forename = "Forename";
  
      // decision on ordering here
      bool some_condition = false;
  
      if(some_condition)
        std::swap(pos1,pos2);
  
      char buf[64];
      sprintf(buf,"Hello %c%d%c %c%d%c",'%',pos1,'%','%',pos2,'%');
      // buf == "Hello %[pos1]% %[pos2]%"; with [posN] = value of posN
  
      std::cout &lt;&lt; format(buf) % surname % forename;
  }
  </code></pre>
  
  <p>Now, I would rather have it like this, i.e., everything in the <code>format</code> line:</p>
  
  <pre><code>std::cout &lt;&lt; format("Hello %%1%% %%2%%") % pos1 % pos2 % surname % forename;
  </code></pre>
  
  <p>But sadly, that doesn't work, as I get a nice parsing exception.  </p>
  
  <p>Is there any library to have real positional formatting? Or even a way to achieve this with Boost.Format that I don't know of?</p>