title: Tuple of pointers to functions returning reference to variadic types
body: <p>Don't let the question title scare you off! I believe this is simply a question of syntax.</p>
  
  <p>I have this class</p>
  
  <pre><code>template&lt;typename ... Types&gt;
  class test_class{
      public:
          template&lt;typename T&gt;
          T &amp;get(){return std::get&lt;T&gt;(m_values);}
  
          template&lt;typename T&gt;
          void set(T &amp;&amp;t){std::get&lt;T&gt;(m_values) = t;}
  
          // scary part
          std::pair&lt;std::tuple&lt;/* trouble */ Types&amp;(*)()...&gt;, std::tuple&lt;void(*)(Types)...&gt;&gt; &amp;getters_setters(){
              static std::pair&lt;std::tuple&lt;Types&amp;&amp;(*)()...&gt;, std::tuple&lt;void(*)(Types)...&gt;&gt; ret{
                  std::make_tuple(get&lt;Types&gt;...),
                  std::make_tuple(set&lt;Types&gt;...)
              };
              return ret;
          }
  
      private:
          std::tuple&lt;Types...&gt; m_values;
  };
  </code></pre>
  
  <p>And would love to know the correct syntax for an expansion of the template parameter pack so that I can get a tuple of <code>T &amp;get()</code> function pointers.</p>