How to pass variadic amount of `std::pair` with different 2nd types to a function
<p>Sorry for the inability to explain the primary Q in the title itself due to complexity of the problem.<br>
Need to pass various types of <code>std::pair</code>s to a method like below:</p>

<pre><code>foo({1, 1} , {2, 2.2}, {3, "3"});  // 'first' is always `int`
</code></pre>

<p>However, I couldn't figure out a syntax for <strong>How to define <code>foo()</code> using variadic templates?</strong></p>

<p>This is more of a cosmetic change, where the intention is to avoid the boiler plate code. Hence below suggestion is ruled out:</p>

<pre><code>template&lt;typename... Args&gt;
void foo (Args&amp;&amp;... args) { ... }

template&lt;typename T&gt; using pair = std::pair&lt;int, T&gt;;
foo(pair&lt;int&gt;{1, 1} , pair&lt;double&gt;{2, 2.2}, pair&lt;std::string&gt;{3, "3"});
</code></pre>

<hr>

<p>For anyone who is interested, what I am going to do with various <code>pair</code>s. An overloaded function will be invoked on all the <code>args...</code> (using array trick) and all the <code>second</code> values will be converted to a <code>std::string</code>. For those who don't know the famous array trick:</p>

<pre><code>const string array[] = { MyFunc(std::forward&lt;Pairs&gt;(pairs)) ... };
</code></pre>

<p><sub>Similar (but not duplicate) question: <a href="https://stackoverflow.com/questions/34482116/passing-multiple-stdpair-to-variadic-template-constructor-using">Passing multiple std::pair to variadic template constructor using { }, { }</a></sub></p>