Are std::tuple and std::tuple<std::tuple> considered same type by std::vector? : <p>I have a variable defined like this</p>

<pre><code>auto drum = std::make_tuple
          ( std::make_tuple
          ( 0.3f
          , ExampleClass
          , [](ExampleClass&amp; instance) {return instance.eGetter ();}
          )
          );
</code></pre>

<p>I expect <code>drum</code> to be a tuple of tuple. (i.e. <code>((a, b, c))</code>).</p>

<p>And I have another variable defined like this</p>

<pre><code>auto base = std::make_tuple
          ( 0.48f
          , ExampleClass
          , [](ExampleClass&amp; instance) {return instance.eGetter ();}
          );
</code></pre>

<p>which I expect to be just a tuple of three elements (i.e <code>(a, b, c)</code>)</p>

<p>I also have a vector defined as follows</p>

<pre><code>std::vector&lt;std::tuple&lt;std::tuple&lt; float
                                 , ExampleClass
                                 , std::function&lt;float (ExampleClass&amp;)&gt;
                                 &gt;&gt;&gt; listOfInstruments;
</code></pre>

<p>Now if I add <code>drum</code> to <code>listOfInstruments</code> I expect no errors.</p>

<p>Which was indeed the case with <code>listOfInstruments.push_back(drum);</code></p>

<p>Where I expected an error was here <code>listOfInstuments.push_back(base);</code> but the code compiles just fine.</p>

<p>Since <code>listOfInstruments</code> has type 'tuple of tuples', should't adding just 'tuple' cause some error? Unless both <code>()</code> and <code>(())</code> are considered same types by <code>std::vector</code>. Or am I completely wrong and there's something else at work here?</p>

<p>Can't seem to figure it out.</p>
