title: Transparent constexpr int as type id
body: <p>I have a struct <code>Foo</code>.
  I would like to add some kind of id (placeholder ?) to statically select from a tuple of values passed to different <code>Foo</code> objects.
  Ideally I would not make it a template type because it will trigger many changes in other locations.</p>
  
  <p><a href="http://liveworkspace.org/code/3LZ0Fe%2421" rel="nofollow">I tried adding an integer to it and use constexpr expressions (Demo)</a></p>
  
  <pre><code>#include &lt;tuple&gt;
  
  using namespace std;
  
  struct Foo {
  private:
    const int pl;
  
  public:
    constexpr Foo (int c) : pl(c) {}
  
    constexpr int place() {return pl;}
  
    template &lt;typename... T&gt;
    constexpr int extract(std::tuple&lt;T ...&gt; const &amp;vals) {
      // I would like to uncomment the following but it fails compiling
      // return std::get&lt;pl&gt;(vals);
      return std::get&lt;0&gt;(vals);
    }
  };
  
  int main(void) {
     constexpr Foo f(1);
     constexpr std::tuple&lt;int, int&gt; test = std::make_tuple(0, 10);
  
     // The following passes
     static_assert(f.place() == 1, "ERROR");
     // The following fails
     static_assert(f.extract(test) == 10, "ERROR");
  }
  </code></pre>
  
  <p>I was expecting that I could use the <code>constexpr place()</code> in the <code>get&lt;&gt;</code>, what am I missing?</p>
  
  <p>Do I have a way out without using templates?</p>