title: Why do Clang and MSVC not like a member typedef declaration with a redundant set of parentheses?
body: <p>Consider</p>
  <pre><code>using foo = int;
  
  struct A {
      typedef A (foo)();
  };
  </code></pre>
  <p>GCC and ICC accept the snippet, while Clang and MSVC reject it. Clang's error message is</p>
  <blockquote>
  <pre><code>&lt;source&gt;:4:15: error: function cannot return function type 'void ()'
      typedef A (foo)();
                ^
  &lt;source&gt;:4:13: error: typedef name must be an identifier
      typedef A (foo)();
              ^
  2 errors generated.
  </code></pre>
  </blockquote>
  <p>And MSVC says</p>
  <blockquote>
  <pre><code>&lt;source&gt;(4,15): error C2091: function returns function
      typedef A (foo)();
                ^
  </code></pre>
  </blockquote>
  <p>(<a href="https://godbolt.org/z/dc9Ksx" rel="noreferrer">live demo</a>)</p>
  <p>Why do Clang and MSVC produce this error? Which compilers are correct?</p>
  <p>(I'm specifically looking for quotation from the standard or any defect report.)</p>