title: constexpr begin of a std::array
body: <p>I am having trouble understanding why both gcc-8.2.0 and clang-7.0.0 reject the following code (live code <a href="https://godbolt.org/z/RuOXN8" rel="noreferrer">here</a>):</p>
  
  <pre><code>#include &lt;array&gt;
  
  int main() {
  
      constexpr std::array&lt;int,3&gt; v{1,2,3};
      constexpr auto b = v.begin(); // error: not a constexpr 
      return 0;
  }
  </code></pre>
  
  <p>with the error</p>
  
  <pre><code>error: '(std::array&lt;int, 3&gt;::const_pointer)(&amp; v.std::array&lt;int,3&gt;::_M_elems)' 
  is not a constant expression (constexpr auto b = v.begin();)
  </code></pre>
  
  <p>According to <a href="https://en.cppreference.com/w/cpp/container/array/begin" rel="noreferrer">en.cppreference.com</a>, the <code>begin()</code> member function is declared <code>constexpr</code>. Is this a compiler bug? </p>