title: Could not convert from brace-enclosed initializer list to std tuple
body: <p>As part of a bigger project, I'm playing with <code>std::tuple</code> and templates; consider the following code:</p>
  
  <pre class="lang-cpp prettyprint-override"><code>template &lt;typename ...T&gt; void foo(tuple&lt;T...&gt; t) {}
  void bar(tuple&lt;int, char&gt; t) {}
  tuple&lt;int, char&gt; quxx() { return {1, 'S'}; }
  
  int main(int argc, char const *argv[])
  {
      foo({1, 'S'});           // error
      foo(make_tuple(1, 'S')); // ok
      bar({1, 'S'});           // ok
      quxx();                  // ok
      return 0;
  }
  </code></pre>
  
  <p>According to <a href="https://stackoverflow.com/a/32084829">this answer</a> C++17 supports tuple initialization from <em>copy-list-initialization</em>, however it seems such support is limited since I get the following error (GCC 7.2.0):</p>
  
  <pre class="lang-none prettyprint-override"><code>main.cpp: In function 'int main(int, const char**)':
  main.cpp:14:17: error: could not convert '{1, 'S'}' from '&lt;brace-enclosed initializer list&gt;' to 'std::tuple&lt;&gt;'
       foo({1, 'S'}); // error
                   ^
  </code></pre>
  
  <p>Is there any way I can use brace-enclosed syntax in this scenario?</p>
  
  <p><strong>Some Context</strong> : this is going to be used in an operator overload so I guess I'm bound to tuples and cannot make use of variadics, any hint is well-accepted.</p>
  
  <p><strong>Extra</strong> : Clang 6 also complains</p>
  
  <pre class="lang-none prettyprint-override"><code>prog.cc:12:5: error: no matching function for call to 'foo'
      foo({1, 'S'});           // error
      ^~~
  prog.cc:6:31: note: candidate function [with T = &lt;&gt;] not viable: cannot convert initializer list argument to 'tuple&lt;&gt;'
  template &lt;typename ...T&gt; void foo(tuple&lt;T...&gt; t) {}
  </code></pre>