title: double parentheses around function parameter list
body: <p>I have the following code, it compiles with gcc 4.4 with no warnings, and returns 42.</p>
  
  <pre><code>template&lt;typename T&gt;
  struct foo
  { };
  
  template&lt;typename T&gt;
  struct foo&lt;void (T)&gt;
  {
    enum { value = 42 };
  };
  
  int main()
  {
    return foo&lt;void ((int))&gt;::value;
  }
  </code></pre>
  
  <p>Now, I see why it should work when the template parameter is <code>void (int)</code>, but what's the deal with the double parentheses? Is this legal in C++? Is it the same as <code>void (int)</code>?</p>
  
  <p>Cheers</p>