title: Using gsl::span with range-v3
body: <p>I tried a little example to get used to the GSL and range-v3 libraries and I wondered how they could work together. I have this toy example</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;range/v3/all.hpp&gt;
  
  using namespace std;
  using namespace ranges;
  
  void example_vector(vector&lt;int&gt; const&amp; v)
  {
    ranges::for_each(view::tail(v), [](int x){
      cout &lt;&lt; x &lt;&lt; ' ';
    });
    cout &lt;&lt; '\n';
  }
  
  int main()
  {
     auto seq = vector&lt;int&gt; { 2,2,2,0,0,2,1,2 };
     example_vector(seq);
  }
  </code></pre>
  
  <p>which works. But if I try to use <code>gsl::span&lt;int&gt;</code> as a range it leads to an error message. The compiler tells me that <code>span</code> does not fullfill the view concept.</p>
  
  <pre><code>#include &lt;gsl.h&gt;
  
  // ...
  
  void example_span(gsl::span&lt;const int&gt; v)
  {
    ranges::for_each(view::tail(v), [](int x){
      cout &lt;&lt; x &lt;&lt; ' ';
    });
    cout &lt;&lt; '\n';
  }
  </code></pre>
  
  <p>Compiler message:</p>
  
  <pre><code>note: candidate template ignored: disabled by 'enable_if'
        [with Rng = gsl::span&lt;const int, -1&gt; &amp;, Rest = &lt;&gt;, _concept_requires_123 = 42]
                      CONCEPT_REQUIRES_(ViewConcept&lt;Rng, Rest...&gt;())&gt;
  </code></pre>
  
  <p>But in my understanding it should since a <code>span</code> <em>is</em> a particular view and even has <code>begin()</code> and <code>end()</code> iterators (of the same type).</p>
  
  <ul>
  <li>Wouldn't it be cool if they work together being composable or are
  there any reasons for both to be not compatible?</li>
  <li>I think this is an issue which comes from the strong "concept" usage
  in range-v3. Does it get automatically solved if some other sort of
  concept feature is supported by the language?</li>
  <li>I assume <code>span</code> currently needs some adaption if I would like to
  use both libraries together in some piece of (non-industrial) software. What
  should I change to make these work together? (if it is a good idea at all)</li>
  <li>That also leads me ultimately to the question of "What has a class to
  fullfill to work with <code>range-v3</code>?" Is inheritance from facades,
  adaptors or such the only way to tell the compiler currently about these conceptional requirements?</li>
  </ul>