title: Where does this absl::StrCat bug occur, in Abseil or MSVC?
body: <p>I creat string_view from char array</p>
  
  <pre><code>  // creat sv from vector;
    std::vector&lt;char&gt; vec = { 'w', 'h', 'a', 't' };
    char* char_ptr = vec.data();
    size_t sz = vec.size();
    std::string_view sview_obj = std::string_view(char_ptr, sz);
  </code></pre>
  
  <p>If you write:</p>
  
  <pre><code>  using namespace std::string_view_literals;
  
    std::cout &lt;&lt; absl::StrCat(sview_obj, "ever")    // Error
              &lt;&lt; absl::StrCat(sview_obj, sview_obj) // Error
              &lt;&lt; absl::StrCat("what", "ever"sv)     // Error
              &lt;&lt; absl::StrCat("what"sv, "ever"sv)   // Error
              &lt;&lt; absl::StrCat("what", "ever");      // Okey
  </code></pre>
  
  <p>MSVC error:</p>
  
  <pre><code>&lt;source&gt;(16): error C2039: 'string_view_literals': is not a member of 'std'
  /opt/compiler-explorer/libs/abseil\absl/numeric/int128.h(231): note: see declaration of 'std'
  &lt;source&gt;(16): error C2871: 'string_view_literals': a namespace with this name does not exist
  &lt;source&gt;(18): error C2665: 'absl::StrCat': none of the 5 overloads could convert all the argument types
  /opt/compiler-explorer/libs/abseil\absl/strings/str_cat.h(310): note: could be 'std::string absl::StrCat(const absl::AlphaNum &amp;,const absl::AlphaNum &amp;)'
  &lt;source&gt;(18): note: while trying to match the argument list '(std::string_view, const char [5])'
  &lt;source&gt;(19): error C2665: 'absl::StrCat': none of the 5 overloads could convert all the argument types
  /opt/compiler-explorer/libs/abseil\absl/strings/str_cat.h(310): note: could be 'std::string absl::StrCat(const absl::AlphaNum &amp;,const absl::AlphaNum &amp;)'
  &lt;source&gt;(19): note: while trying to match the argument list '(std::string_view, std::string_view)'
  &lt;source&gt;(20): error C3688: invalid literal suffix 'sv'; literal operator or literal operator template 'operator ""sv' not found
  &lt;source&gt;(21): error C3688: invalid literal suffix 'sv'; literal operator or literal operator template 'operator ""sv' not found
  </code></pre>
  
  <p>Other than <code>operator""sv</code> seems missing in MSVC,
  <a href="https://godbolt.org/z/UR04EI" rel="nofollow noreferrer">line 18 and 19</a> have a thing in common:</p>
  
  <pre><code>  std::cout &lt;&lt; absl::StrCat(sview_obj, "ever")    // Error
              &lt;&lt; absl::StrCat(sview_obj, sview_obj) // Error
  </code></pre>
  
  <p>Error:</p>
  
  <pre><code>&lt;source&gt;(18): error C2665: 'absl::StrCat': none of the 5 overloads could convert all the argument types
  /opt/compiler-explorer/libs/abseil\absl/strings/str_cat.h(310): note: could be 'std::string absl::StrCat(const absl::AlphaNum &amp;,const absl::AlphaNum &amp;)'
  &lt;source&gt;(18): note: while trying to match the argument list '(std::string_view, const char [5])'
  </code></pre>
  
  <hr>
  
  <p>When I compile on my VC BuildTool (with clang 8 target msvc), it gives additional clues here.</p>
  
  <pre><code>In file included from C:/Program Files/C++ Source/abseil-cpp/absl/strings/ascii.cc:15:
  C:\Program Files\C++ Source\abseil-cpp\absl/strings/ascii.h(198,10):  error: no matching constructor for initialization of 'absl::string_view' (aka 'basic_string_view&lt;char&gt;')
    return absl::string_view(it, str.end() - it);
           ^                 ~~~~~~~~~~~~~~~~~~
  C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.13.26128\include\xstring(809,12):  note: candidate constructor not viable: no known conversion from 'std::_String_view_iterator&lt;std::char_traits&lt;char&gt; &gt;' to 'const std::basic_string_view&lt;char, std::char_traits&lt;char&gt; &gt;::const_pointer' (aka 'const char *const') for 1st argument
          constexpr basic_string_view(_In_reads_(_Count) const const_pointer _Cts, const size_type _Count)
                    ^
  </code></pre>
  
  <p>It seems conversion from <code>std::_String_view_iterator&lt;std::char_traits&lt;char&gt; &gt;</code> to <code>const std::basic_string_view&lt;char, std::char_traits&lt;char&gt; &gt;::const_pointer</code> (aka <code>const char *const</code>) is impossible in current MSVC <code>include\xstring</code></p>
  
  <p>Clang and gcc are okey with this.</p>
  
  <p><a href="https://godbolt.org/z/UR04EI" rel="nofollow noreferrer">godbolt</a></p>
  
  <hr>
  
  <h2>Update</h2>
  
  <p>According to <em>Algirdas Preidžius</em> and <em>Hans Passant</em>'s comment below, after change godbolt compiler from MSVC 2017 RTM into MSVC Pre 2018, <code>sv</code> literals are now all okey.</p>
  
  <p>Still there is one more bug mentioned above.</p>
  
  <pre><code>std::cout &lt;&lt; absl::StrCat(sview_obj, "ever")    // Error
  </code></pre>
  
  <p>Error</p>
  
  <pre><code>&lt;source&gt;(18): error C2665: 'absl::StrCat': none of the 5 overloads could convert all the argument types
  /opt/compiler-explorer/libs/abseil\absl/strings/str_cat.h(310): note: could be 'std::string absl::StrCat(const absl::AlphaNum &amp;,const absl::AlphaNum &amp;)'
  &lt;source&gt;(18): note: while trying to match the argument list '(std::string_view, const char [5])'
  </code></pre>
  
  <p><a href="https://godbolt.org/z/TwFTBB" rel="nofollow noreferrer">goldbolt 2</a></p>