title: C++ Square Bracket Syntax
body: <p>On the cppreference article about SFINAE, I came across this syntax which I do not understand:</p>
  <pre class="lang-cpp prettyprint-override"><code>template &lt;int I&gt; void div(char(*)[I % 2 == 0] = 0) {
          // this overload is selected when I is even
  }
  template &lt;int I&gt; void div(char(*)[I % 2 == 1] = 0) {
          // this overload is selected when I is odd
  }
  </code></pre>
  <p>I get that its a template function declaration, but I don't understand what the parameters mean. In particular, what are the square brackets in <code>char(*)[I % 2 == 0] = 0</code> and why is it equal to 0?</p>