title: Why doesn't my example satisfy this "requires" expression?
body: <p>I am attempting to use concepts with a variadic template. My template class is below. The concept should say: &quot;<strong>Each type <code>T</code> should have a member function <code>Func</code> that accepts an input of type <code>FuncArgType</code>.</strong>&quot;</p>
  <pre><code>#pragma once
  
  #include &lt;tuple&gt;
  #include &lt;concepts&gt;
  #include &lt;iostream&gt;
  
  template&lt;typename FuncArgType, typename... Ts&gt;
  requires requires
  (FuncArgType func_arg, std::tuple&lt;Ts...&gt; args) {
      std::apply([&amp;func_arg](auto&amp;... ts) {(ts.Func(func_arg), ...); }, args);
  }
  class MyClass
  {
  public:
      MyClass() {}
  };
  </code></pre>
  <p>This appears to me to be correct, although there might be an error with my use of <code>std::apply</code>. I then try to create an object using <code>MyClass</code>. I define two classes <code>A</code> and <code>B</code> to be my <code>Ts</code>. <code>FuncArgType</code> is <code>int</code>.</p>
  <pre><code>class A {
  public:
      A() {}
      void Func(int i) {
          std::cout &lt;&lt; &quot;Called Func of A&quot;;
      }
  
  };
  
  
  class B {
  public:
      B() {}
      void Func(int i) {
          std::cout &lt;&lt; &quot;Called Func of B&quot;;
      }
  
  };
  </code></pre>
  <p>I now try to create an instance of <code>MyClass</code>.</p>
  <pre><code>#include &quot;MyClass.h&quot;
  
  int main() {
      MyClass&lt;int, A, B&gt; my_class{}; // constraints not satisfied
  
      return 0;
  }
  </code></pre>
  <p>The error message is</p>
  <pre><code>Source.cpp(4,19): error C7602: 'MyClass': the associated constraints are not satisfied
  </code></pre>
  <p>(There are several other error messages, but they all essentially say that <code>my_class</code> is invalid.)</p>
  <p>Why don't <code>A</code> and <code>B</code> satisfy my constraint? Does my constraint say what I want it to say? How do I make my constraint say the above bolded statement?</p>