title: Does span propagate const?
body: <p>The standard containers propagate const.  That is, their elements are automatically const if the containers themselves are const.  For example:</p>
  
  <pre><code>const std::vector vec{3, 1, 4, 1, 5, 9, 2, 6};
  ranges::fill(vec, 314); // impossible
  
  const std::list lst{2, 7, 1, 8, 2, 8, 1, 8};
  ranges::fill(lst, 272); // impossible
  </code></pre>
  
  <p>Builtin arrays also propagate const:</p>
  
  <pre><code>const int arr[] {1, 4, 1, 4, 2, 1, 3, 5};
  ranges::fill(arr, 141); // impossible
  </code></pre>
  
  <p>However, I noticed that <code>std::span</code> (presumably) does not propagate const.  Minimal Reproducible Example:</p>
  
  <pre><code>#include &lt;algorithm&gt;
  #include &lt;cassert&gt;
  #include &lt;span&gt;
  
  namespace ranges = std::ranges;
  
  int main()
  {
      int arr[] {1, 7, 3, 2, 0, 5, 0, 8};
  
      const std::span spn{arr};
      ranges::fill(spn, 173);               // this compiles
  
      assert(ranges::count(arr, 173) == 8); // passes
  }
  </code></pre>
  
  <p>Why does this code work fine?  Why does <code>std::span</code> treat const differently than the standard containers?</p>