title: Is there a standard generalization of void_t for other types?
body: <p>In C++17, we have <code>std::void_t</code>, which makes SFINAE look a lot nicer:</p>
  
  <pre><code>template &lt;typename T&gt;
  std::void_t&lt;decltype(T::prop)&gt; foo() { /* stuff */ }
  </code></pre>
  
  <p>The template function will exist only if <code>T::prop</code> exists.</p>
  
  <p>If <code>T::prop</code> exists, the template function <code>foo()</code> would be equivalent to this:</p>
  
  <pre><code>template &lt;typename T&gt;
  void foo() { /* stuff */ }
  </code></pre>
  
  <p>Otherwise, the code is equivalent to not declaring <code>foo()</code> at all.</p>
  
  <p>Is there any generalization of <code>std::void_t</code> for other types in the standard library, such as the following:</p>
  
  <pre><code>template&lt;typename T, typename...&gt;
  using generic_t = T;
  </code></pre>
  
  <p>so that the code below would be valid?</p>
  
  <pre><code>template &lt;typename T&gt;
  std::generic_t&lt;int, decltype(T::prop)&gt; foo() { /* stuff */ }
  </code></pre>
  
  <p>which would be equivalent to</p>
  
  <pre><code>template &lt;typename T&gt;
  int foo() { /* stuff */ }
  </code></pre>
  
  <p>if <code>T::prop</code> exists?</p>