lt;int, double&amp;, const A&amp;&gt; t(1, d, a);
const tuple&lt;int, double&amp;, const A&amp;&gt; ct = t;
  ...
int i = get&lt;0&gt;(t); i = t.get&lt;0&gt;();        // ok
int j = get&lt;0&gt;(ct);                       // ok
get&lt;0&gt;(t) = 5;                            // ok 
get&lt;0&gt;(ct) = 5;                           // error, can't assign to const 
  ...
double e = get&lt;1&gt;(t); // ok   
get&lt;1&gt;(t) = 3.14;     // ok 
get&lt;2&gt;(t) = A();      // error, can't assign to const 
A aa = ge