title: Not compile time constant
body: <p>I have:</p>
  
  <pre><code>    static const std::array&lt;std::pair&lt;ServerD, unsigned int&gt;, 4&gt; dataSizes =
  { std::make_pair(ServerD::ContentType, 1)
  , std::make_pair(ServerD::RemoteAddress, 2)
  , std::make_pair(ServerD::RemoteUser, 3)
  , std::make_pair(ServerD::Url, 4)
  };
  
  template &lt;unsigned int Index&gt;
  struct SizeFinder {
      static const unsigned int SizeFor(ServerD data) {
          return (dataSizes[Index].first == data) ? dataSizes[Index].second :
              SizeFinder&lt;Index - 1&gt;::SizeFor(data);
      }
  };
  
  template &lt;&gt;
  struct SizeFinder&lt;0&gt; {
      static const unsigned int SizeFor(ServerD data) {
          return (dataSizes[0].first == data) ? dataSizes[0].second :
              0;
      }
  };
  </code></pre>
  
  <p>Why is this not a compile time constant:</p>
  
  <pre><code>char tst[SizeFinder&lt;4&gt;::SizeFor(serverD)]
  </code></pre>
  
  <p>// Error    1   error C2975: 'BufferSize' : invalid template argument for 'isapi::`anonymous-namespace'::GetVariableFor', <strong>expected compile-time constant</strong> expression</p>
  
  <p>I must make this work without constexpr. VS2013 still does not have this.</p>
  
  <p><strong>EDIT</strong> As it seems static const functions cannot compute at compile time, is there a workaround for C++ 03 ?      </p>